2009-08-18 Marek Safar <marek.safar@gmail.com>
[mono.git] / mcs / mcs / ChangeLog
1 2009-08-18  Marek Safar  <marek.safar@gmail.com>
2
3         * *.cs: Add IResolveContext::IsStatic.
4
5 2009-08-18  Marek Safar  <marek.safar@gmail.com>
6
7         * *.cs: Moved TopBlock's methods from EmitContext to TopBlock.
8
9 2009-08-17  Marek Safar  <marek.safar@gmail.com>
10
11         * *.cs: Removed DeclContainer from EmitContext.
12
13 2009-08-17  Marek Safar  <marek.safar@gmail.com>
14
15         * *.cs: Add IResolveContext::CurrentTypeParameters.
16
17 2009-08-14  Marek Safar  <marek.safar@gmail.com>
18
19         * *.cs: Removed TypeContainer and ContainerType from EmitContext.
20
21 2009-08-14  Marek Safar  <marek.safar@gmail.com>
22
23         * decl.cs, expression.cs, namespace.cs, ecore.cs, class.cs,
24         codegen.cs: Add IResolveContext::LookupExtensionMethod.
25
26 2009-08-13  Marek Safar  <marek.safar@gmail.com>
27
28         * decl.cs: Look in PartialContainer for parent type parameters.
29
30 2009-08-13  Marek Safar  <marek.safar@gmail.com>
31
32         * decl.cs, namespace.cs, ecore.cs, class.cs, attribute.cs,
33         codegen.cs: Add IResolveContext::LookupTypeParameter.
34
35 2009-08-13  Marek Safar  <marek.safar@gmail.com>
36
37         * lambda.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
38         Moved resolved logic from Emit to Resolve.
39
40 2009-08-13  Marek Safar  <marek.safar@gmail.com>
41
42         * parameter.cs, decl.cs, roottypes.cs, class.cs, attribute.cs,
43         codegen.cs: Reworked atttributes handling of ResolveContext.
44
45 2009-08-12  Marek Safar  <marek.safar@gmail.com>
46
47         * decl.cs, ecore.cs, class.cs, attribute.cs, codegen.cs: Pushed
48         LookupNamespaceOrType to ResolveContext.
49
50 2009-08-12  Marek Safar  <marek.safar@gmail.com>
51
52         * typemanager.cs, decl.cs, expression.cs, namespace.cs, ecore.cs,
53         class.cs: Removed unused parameters and methods.
54
55 2009-08-11  Marek Safar  <marek.safar@gmail.com>
56
57         * generic.cs, lambda.cs, anonymous.cs, statement.cs, generic-mcs.cs,
58         codegen.cs: Finding the best common type of a set of expressions for
59         lambda statements.
60
61 2009-08-07  Marek Safar  <marek.safar@gmail.com>
62
63         * dynamic.cs, expression.cs: More dynamic conversions.
64
65 2009-08-06  Miguel de Icaza  <miguel@novell.com>
66
67         * generic.cs: This loop was incorrect, it was increment ii, but
68         checking for `i'.  This was a change introduced to fix #327497,
69         now we fix #424012.
70  
71         * class.cs: Catch another case for cs0533 error, fixes #324782.
72
73 2009-08-06 Rodrigo Kumpera  <rkumpera@novell.com>
74
75         * typemanager.cs (GetGenericArguments): SRE returns null for
76         generic methods on type builder instances if they are not generic
77         themselves. For example, for Foo<int>::Bar() it returns null, but
78         not for Foo<int>::Bar<>() or Foo<int>::Bar<double>().
79
80 2009-08-05  Marek Safar  <marek.safar@gmail.com>
81
82         * argument.cs, dynamic.cs, expression.cs, ecore.cs, class.cs,
83         delegate.cs: Work on dynamic binding.
84
85 2009-08-04  Marek Safar  <marek.safar@gmail.com>
86
87         A second fix for bug #525342
88         * class.cs: Attach partial method attributes to method
89         implementation.
90
91 2009-08-03  Marek Safar  <marek.safar@gmail.com>
92
93         * typemanager.cs, parameter.cs, support.cs, class.cs: Dynamic type
94         restrictions.
95         
96         * rootcontext.cs: Default to langversion v4.
97
98 2009-08-03  Marek Safar  <marek.safar@gmail.com>
99
100         * pending.cs: Check return type before member info is set.
101
102 2009-08-03  Marek Safar  <marek.safar@gmail.com>
103
104         * anonymous.cs: Fully initialize generic hoisted field expression.
105
106 2009-08-02  Miguel de Icaza  <miguel@novell.com>
107
108         * cs-parser.jay: Flag variables declared on the interactive shell
109         as used to prevent the 168 warning about local variable not being
110         used. 
111
112 2009-07-31  Marek Safar  <marek.safar@gmail.com>
113
114         * parameter.cs, dynamic.cs, support.cs, class.cs, delegate.cs,
115         attribute.cs: Emit dynamic export attribute.
116
117 2009-07-30  Marek Safar  <marek.safar@gmail.com>
118
119         * expression.cs: More verifier work.
120
121 2009-07-29  Marek Safar  <marek.safar@gmail.com>
122
123         * nullable.cs: Fixed SRE crash during corlib compilation.
124
125 2009-07-29  Marek Safar  <marek.safar@gmail.com>
126
127         * generic.cs, typemanager.cs, decl.cs, iterators.cs, convert.cs,
128         nullable.cs, expression.cs, ecore.cs, class.cs, attribute.cs:
129         More TypeManager.TypeToCoreType needed.
130
131 2009-07-29  Marek Safar  <marek.safar@gmail.com>
132
133         * anonymous.cs: Update after recent SRE fixes.
134
135 2009-07-28  Marek Safar  <marek.safar@gmail.com>
136
137         * typemanager.cs, expression.cs, ecore.cs, delegate.cs: Use correct
138         version of GetFieldHandle for fields of generic types.
139
140 2009-07-27  Marek Safar  <marek.safar@gmail.com>
141
142         * typemanager.cs, argument.cs, convert.cs, assign.cs, expression.cs,
143         ecore.cs: Add TypeManager.IsDynamicType,
144         PredefinedAttributes.Dynamic.
145
146 2009-07-27  Marek Safar  <marek.safar@gmail.com>
147
148         A fix for bug #415375
149         * expression.cs: Fixed object and reference type parameter
150         comparison.
151
152 2009-07-27  Marek Safar  <marek.safar@gmail.com>
153
154         A fix for bug #525342
155         * class.cs: Attach partial method attributes to method
156         implementation.
157
158 2009-07-24  Marek Safar  <marek.safar@gmail.com>
159
160         * argument.cs, dynamic.cs, expression.cs, class.cs, attribute.cs:
161         Dynamic arguments.
162
163 2009-07-24  Marek Safar  <marek.safar@gmail.com>
164
165         * anonymous.cs (MutateField): Add imported types handling.
166
167 2009-07-23  Marek Safar  <marek.safar@gmail.com>
168
169         * expression.cs, delegate.cs: Moved arguments resolve into their
170         counterparts expressions. Removed argument resolve from
171         CollectionElementInitializer.
172
173 2009-07-23  Marek Safar  <marek.safar@gmail.com>
174
175         A fix for bug #523683
176         * convert.cs, delegate.cs: Use common overload mechanism for method
177         group conversion check.
178
179 2009-07-22  Marek Safar  <marek.safar@gmail.com>
180
181         A fix for bug #523899
182         * generics.cs: Exact type inference with other bound types.
183
184 2009-07-22  Raja R Harinath  <harinath@hurrynot.org>
185
186         Don't complain when the same type is implemented by the output
187         assembly as well as multiple referenced assemblies
188         * namespace.cs (RootNamespace.LookupTypeReflection): Add
189         'must_be_unique' flag.
190         (GlobalRootNamespace): Update to changes.
191         (Namespace.LookupType): Pass 'must_be_unique' only when we don't
192         already have a type in hand.
193
194 2009-07-22  Marek Safar  <marek.safar@gmail.com>
195
196         * expression.cs: More verifier instrumentation.
197         
198         * statement.cs: Do proper throw expression conversion.
199
200 2009-07-22  Marek Safar  <marek.safar@gmail.com>
201
202         A fix for bug #522789
203         * expression.cs: Mutate invocation return type.
204
205 2009-07-16  Marek Safar  <marek.safar@gmail.com>
206
207         * anonymous.cs: Split assignable and readonly generated variable
208         references.
209
210 2009-07-16  Marek Safar  <marek.safar@gmail.com>
211
212         A fix for bug #521671
213         * statement.cs: Fixed crash when checking missing type.
214
215 2009-07-16  Marek Safar  <marek.safar@gmail.com>
216
217         * typemanager.cs, generic.cs, argument.cs, linq.cs, convert.cs,
218         assign.cs, expression.cs, statement.cs, support.cs, ecore.cs,
219         class.cs, driver.cs: Work on dynamic binding.
220
221         * dynamic.cs: New file.
222
223         * *.sources, *.proj: Updated.
224
225 2009-07-15  Marek Safar  <marek.safar@gmail.com>
226
227         * expression.cs (Conditional): Avoid double Resolve.
228
229 2009-07-13  Marcus Griep  <marcus@griep.us>
230
231         * ecore.cs: Fix obscure bug with resolving members of interfaces
232         that hide parent interface members. Fixes bug #444388 and corrects
233         bug #323096
234
235 2009-07-13  Marek Safar  <marek.safar@gmail.com>
236
237         * expression.cs (LocalVariableReference): Bounce resolve.
238
239 2009-07-10  Marek Safar  <marek.safar@gmail.com>
240
241         * typemanager.cs, lambda.cs, parameter.cs, convert.cs, anonymous.cs,
242         expression.cs, literal.cs, ecore.cs, complete.cs: Moved internal
243         types to new class.
244         
245         * support.cs: New dynamic type wrapper.
246
247 2009-07-08  Marek Safar  <marek.safar@gmail.com>
248
249         * ecore.cs, cs-parser.jay: Better error reporting for implicitly
250         typed local variable.
251
252 2009-07-06  Marek Safar  <marek.safar@gmail.com>
253
254         A fix for bug #519005
255         * anonymous.cs: Use null_type as no return type placeholder.
256
257 2009-07-02  Marek Safar  <marek.safar@gmail.com>
258
259         * generic.cs: Handle type inference of identical type parameters
260         with different bounds.
261
262 2009-07-01  Marek Safar  <marek.safar@gmail.com>
263
264         * expression.cs, class.cs: Events variance.
265         
266         * cs-parser.jay: Interface events error messages.
267
268 2009-07-01  Marek Safar  <marek.safar@gmail.com>
269
270         * generic.cs, argument.cs: Updated type inference logic to C# 4.0.
271
272 2009-06-29  Marek Safar  <marek.safar@gmail.com>
273
274         * parameter.cs, convert.cs, expression.cs, class.cs: Default
275         parameter expression can be value-type New.
276
277         * cs-parser.jay: Clean up too many parameter modifier boolean flags.
278
279 2009-06-26  Marek Safar  <marek.safar@gmail.com>
280
281         * generic.cs, argument.cs, expression.cs, ecore.cs, cs-parser.jay:
282         Implemented C# 4.0 named arguments.
283
284 2009-06-24  Marek Safar  <marek.safar@gmail.com>
285
286         * typemanager.cs, parameter.cs, iterators.cs, convert.cs,
287         expression.cs, ecore.cs, delegate.cs: Removed unnecessary ArgList
288         parameter modifier. Also fixes bug #515497.
289
290 2009-06-24  Marek Safar  <marek.safar@gmail.com>
291
292         * *.cs: Replaced ArrayList with Arguments in need of a nonsequential 
293         arguments expression to be implemented.
294         
295         *.sources: Add argument.cs
296
297 2009-06-23  Marek Safar  <marek.safar@gmail.com>
298
299         * parameter.cs: Moved GetParameterIndexByName to base class.
300         
301         * expression.cs, statement.cs, ecore.cs, delegate.cs: Removed
302         unused AType. Use argument's version of GetExpressionTree.
303
304 2009-06-22  Marek Safar  <marek.safar@gmail.com>
305
306         * expression.cs, cs-parser.jay, attribute.cs, codegen.cs: Named
307         arguments grammar.
308
309 2009-06-17  Marek Safar  <marek.safar@gmail.com>
310
311         A fix for bug #514096
312         * class.cs: Allow IntPtr/UIntPtr fields to be volatile.
313
314 2009-06-17  Marek Safar  <marek.safar@gmail.com>
315
316         * expression.cs: The first multi-dimensional array nested array
317         initializers was not checked.
318         
319         * statement.cs (Switch): Fixed error message to reflect 2.0 changes.
320
321 2009-06-17  Marek Safar  <marek.safar@gmail.com>
322
323         A fix for bug #513400
324         * nullable.cs (EmitEquality): Operands emit could be simplified for
325         built-in types when we now emit user operators differently.
326
327 2009-06-16  Marek Safar  <marek.safar@gmail.com>
328
329         * ecore.cs: Report inaccessible delegate methods correctly.
330
331 2009-06-16  Marek Safar  <marek.safar@gmail.com>
332
333         * parameter.cs, expression.cs, ecore.cs, class.cs, delegate.cs,
334         cs-parser.jay: Implemented C# 4.0 optional parameters.
335
336 2009-06-16  Marek Safar  <marek.safar@gmail.com>
337
338         * driver.cs: Removed broken DefineManifestResource.
339
340 2009-06-16  Raja R Harinath  <harinath@hurrynot.org>
341
342         * Makefile [net_2_0_bootstrap]: Don't explicitly mention net_1_1.
343         Use $(BOOTSTRAP_PROFILE) instead.
344
345 2009-06-12  Jb Evain  <jbevain@novell.com>
346
347         * rootcontext.cs: add a Platform field.
348         * driver.cs: handle /platform.
349         * codegen.cs: pass the proper flags according to
350         the platform when saving the assembly.
351
352 2009-06-11  Marek Safar  <marek.safar@gmail.com>
353
354         * parameter.cs, const.cs, report.cs, cs-parser.jay, attribute.cs:
355         Add optional parameters grammar.
356
357 2009-06-10  Marek Safar  <marek.safar@gmail.com>
358
359         * eval.cs, anonymous.cs, report.cs, rootcontext.cs, cs-parser.jay,
360         driver.cs: Split lang version and metadata version.
361
362 2009-06-10  Marek Safar  <marek.safar@gmail.com>
363
364         * decl.cs: Better overload ctor collision error message.
365
366 2009-06-05  Jb Evain  <jbevain@novell.com>
367
368         * driver.cs (EmbededResource): avoid using an internal method
369         in gmcs to embed manifest resources.
370
371 2009-06-04  Sebastien Pouliot  <sebastien@ximian.com>
372
373         * generic.cs, parameter.cs: Avoid using 'var' so we can bootstrap
374         the compiler from older mono versions (like moon's bots)
375
376 2009-06-04  Marek Safar  <marek.safar@gmail.com>
377
378         * namespace.cs (LookupTypeReflection): Ignore collisions between
379         forwarded types.
380
381 2009-06-04  Marek Safar  <marek.safar@gmail.com>
382
383         * codegen.cs: Enabled generic type forwarders.
384
385 2009-06-04  Marek Safar  <marek.safar@gmail.com>
386
387         * dmcs.*: Add another version of SRE compiler.
388
389 2009-06-03  Marek Safar  <marek.safar@gmail.com>
390
391         * generic.cs, typemanager.cs, parameter.cs, convert.cs,
392         generic-mcs.cs: Fixed variant type conversions.
393
394 2009-06-02  Marek Safar  <marek.safar@gmail.com>
395
396         A fix for bug #507863
397         * codegen.cs: Fixes a crash on invalid string value attribute.
398
399 2009-06-01  Marek Safar  <marek.safar@gmail.com>
400
401         A fix for bug #508334
402         * typemanager.cs, parameter.cs, convert.cs, expression.cs, ecore.cs,
403         cs-parser.jay: Fully import __arglist modifier.
404
405 2009-05-29  Marek Safar  <marek.safar@gmail.com>
406
407         * generic.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs,
408         delegate.cs, generic-mcs.cs: Rewrote type variance checks to
409         actually work with closed generic types.
410
411 2009-05-27  Alan McGovern  <amcgovern@novell.com>
412
413         * class.cs, decl.cs, delegate.cs, parameter.cs: 
414         Fix the build by replacing the use of 'var' with the actual type.
415
416 2009-05-27  Marek Safar  <marek.safar@gmail.com>
417
418         * generic.cs, parameter.cs, decl.cs, ecore.cs, class.cs, delegate.cs
419     cs-parser.jay, generic-mcs.cs: Report wrong variant types
420         declarations.
421           
422         * driver.cs, rootcontext.cs, report.cs: Add 3.0 language version
423         filter.
424
425 2009-05-26  Rodrigo Kumpera  <rkumpera@novell.com>
426                         Marek Safar  <marek.safar@gmail.com>
427
428         A fix for bug #377509
429         * parameter.cs: Use predefined and not empty name for implicit
430         setters.
431
432 2009-05-21  Marek Safar  <marek.safar@gmail.com>
433
434         * class.cs: Don't report wrong warnings for event fields.
435
436 2009-05-21  Marek Safar  <marek.safar@gmail.com>
437
438         A fix for bug #504667
439         * class.cs: Check for static class using parent container instead of
440         parent type.
441
442 2009-05-08  Marek Safar  <marek.safar@gmail.com>
443
444         A fix for bug #496922
445         * expression.cs: Always use temporary variable when using object
446         initializer.
447
448 2009-04-28  Marek Safar  <marek.safar@gmail.com>
449
450         A fix for bug #495112
451         * class.cs (IsUnmanagedType): Handle recursive unmanaged types using
452         local cache.
453
454 2009-04-27  Miguel de Icaza  <miguel@novell.com>
455
456         * driver.cs: Add a flag to work as a replacement for CSC in VS.
457
458 2009-04-24  Miguel de Icaza  <miguel@novell.com>
459
460         * complete.cs: No idea how gonzalo got a null in the list, but
461         avoid crashing.
462
463 2009-04-24  Miguel de Icaza  <miguel@novell.com>
464
465         * complete.cs (CompletionElementInitializer): New completion class
466         to support completing inside a C# 3 element initializer, so this
467         allows completion for Silverlight situations where it is very
468         common to do:
469
470         new TextBlock () { Fo<TAB>
471
472         (CompletionSimpleName): Expose the prefix that was
473         passed to the simple name.
474
475         * cs-parser.jay (object_or_collection_initializer): Add support
476         for element_initializers.
477
478         * expression.cs (CollectionOrObjectInitializers.DoResolve):
479         special case completion expressions as this method aggressively
480         collects data before it operates, and errors were being thrown
481         earlier than we were able to complete.
482
483 2009-04-23  Miguel de Icaza  <miguel@novell.com>
484
485         * eval.cs: Make getcompletions silent and enable debugging output
486         if the -v option is passed.
487
488         * namespace.cs (NamespaceEntry.CompletionGetTypesStartingWith):
489         Consider looking up the namespace that matches the prefix being
490         used. 
491
492         This is part of the support for allowing completions like:
493         `System.Co<TAB>' to complete to System.Console.
494
495         * complete.cs (CompletionSimpleName.AppendResults): Make this
496         routine reusable.
497
498 2009-04-21  Raja R Harinath  <harinath@hurrynot.org>
499
500         * cs-parser.jay (GetTokenName): Mark GENERATE_COMPLETION and
501         COMPLETE_COMPLETION as internal.
502
503 2009-04-17  Miguel de Icaza  <miguel@novell.com>
504
505         * complete.cs: Include namespace resolution in simple names as
506         well as global types and types in the using scope in the
507         resolution. 
508
509         * namespace.cs: Supporting infrastrcture to provide completions
510         based on the current using scope. 
511
512         * eval.cs: Introduce an entry point that allows for initialization
513         to return a list of the files passed on the command line.
514
515 2009-04-14  Marek Safar  <marek.safar@gmail.com>
516
517         A fix for bug #494243
518         * report.cs (SymbolRelatedToPreviousError): Fixed NRE.
519
520 2009-04-13  Marek Safar  <marek.safar@gmail.com>
521
522         A fix for bug #493887
523         * statement.cs: Don't skip string multi-section with default or
524         null label when populating string hashtable.
525
526 2009-04-06  Marek Safar  <marek.safar@gmail.com>
527
528         A fix for bug #492329
529         * expression.cs (New): Load variable when assigning type parameter
530         to ref variable.
531
532 2009-04-06  Marek Safar  <marek.safar@gmail.com>
533
534         A fix for bug #488960
535         * decl.cs: Compare MVAR types using non-null values.
536
537 2009-03-27  Marek Safar  <marek.safar@gmail.com>
538
539         * typemanager.cs, expression.cs: Removed unused nullable checks.
540
541 2009-03-27  Marek Safar  <marek.safar@gmail.com>
542
543         * *.cs: Removed some gmcs conditionals.
544
545 2009-03-26  Marek Safar  <marek.safar@gmail.com>
546
547         * generic.cs, support.cs: Moved generics stuff out of support.cs
548
549 2009-03-24  Marek Safar  <marek.safar@gmail.com>
550
551         * ecore.cs, expression.cs: Use queried type for MethodGroupExpr
552         DeclaringType.
553
554 2009-03-23  Marek Safar  <marek.safar@gmail.com>
555
556         * attribute.cs: Consider all members for error reporting when
557         checking named arguments.
558
559 2009-03-23  Marek Safar  <marek.safar@gmail.com>
560
561         A fix for bug #487625
562         * namespace.cs: Use a warning for all predefined type conflicts.
563
564 2009-03-23  Marek Safar  <marek.safar@gmail.com>
565
566         A fix for bug #485706
567         * statement.cs: Explicitly type catch type argument to pass verifier
568         check.
569
570 2009-03-22  Miguel de Icaza  <miguel@novell.com>
571
572         Initial support to provide code completion facilities to consumers
573         of the evaluator API.
574         
575         * cs-tokenizer.cs (CompleteOnEOF): this new property is used to
576         support the completion engine.   When we reach the end of the
577         input stream instead of returning EOF, when this flag is true the
578         tokenizer instead produces:
579
580                 One GENERATE_COMPLETION token: this token then must be
581                 handled in the grammar at every point where the user
582                 would likely request a completion.
583
584                 As many COMPLETE_COMPLETION tokens as necessary.   These
585                 tokens are generated to assist the parser in unwinding and
586                 producing a valid parse tree.    
587
588         The parser rules do not have to be perfect, the parser needs to be
589         augmented with judicious use of GENERATE_COMPLETION tokens to
590         improve the areas where we can provide completion and the parser
591         needs to add support for COMPLETE_COMPLETION tokens in productions
592         to make them work.
593
594         It is common to not have enough support for COMPLETE_COMPLETION
595         under certain rules and that even if we generated the
596         GENERATE_COMPLETION token that the resulting tree will be invalid
597         due to the missing rules that support COMPLETE_COMPLETION.
598
599         The final EOF token is produced by having the parser notify the
600         tokenizer when it reaches the root production that the next token
601         should be EOF.
602
603         * support.cs (CompletionResult): New Exception.   This exception
604         is thrown to return the completion results when one of the special
605         completion expressions is reached.
606
607         This exception is thrown by the completing ExpressionStatements
608         classes that live in complete.cs
609
610         * complete.cs (CompletingExpression): a new base class for
611         completing expressions.   This derives from the
612         ExpressionStatement class and not from Expression as it allows
613         completion to happen not only where expressions are expected in
614         the grammar, but also where statements are expected.
615
616         (CompletionSimpleName): A new class used to provide completions
617         for SimpleNames.     This currently only resolves to local
618         variables from the evaluator context (GetVars call).
619
620         (CompletionMemberAccess): Implements support for completing member
621         access patterns. 
622
623         * cs-parser.jay: Add support for completion in a few places. 
624
625         * eval.cs (GetCompletions): New public API for the evaluator that
626         returns a list of possible completions given the input.   The
627         return value is an array of completions 
628
629         * anonymous.cs (Compatible): If the exception thrown from the
630         resolved expression is a CompletionResult exception let that one
631         through instead of printing a diagnostic error in the try/catch. 
632 <       
633 2009-03-22  Miguel de Icaza  <miguel@novell.com>
634
635         * 
636
637         * driver.cs (Main): Use Environment.Exit to quit quickly and
638         prevent the compiler from doing the usual wait for helper thread
639         to terminate.  
640
641         This is to prevent a slowdown that was reported by Gonzalo on
642         ASP.NET 
643
644 2009-03-19  Marek Safar  <marek.safar@gmail.com>
645
646         * ecore.cs: Load build-in types directly instead of accessing
647         an internal field.
648
649 2009-03-18  Marek Safar  <marek.safar@gmail.com>
650
651         * ecore.cs: Always use unbox.any when available.
652
653 2009-03-18  Marek Safar  <marek.safar@gmail.com>
654
655         * class.cs: Always set TypeAttributes.BeforeFieldInit conditionally.
656
657 2009-03-17  Marek Safar  <marek.safar@gmail.com>
658
659         * generic.cs: Removed obsolete version of type inference.
660
661 2009-03-16  Marek Safar  <marek.safar@gmail.com>
662
663         * typemanager.cs, decl.cs, roottypes.cs, anonymous.cs, nullable.cs,
664         expression.cs, rootcontext.cs, namespace.cs, ecore.cs, class.cs,
665         delegate.cs, flowanalysis.cs, cs-parser.jay, driver.cs,
666         attribute.cs, codegen.cs: Changed RootTypes to be ModuleContainer.
667
668 2009-03-11  Marek Safar  <marek.safar@gmail.com>
669
670         A fix for bug #482996
671         * anonymous.cs: Make sure we are not infering return type when
672         checking type compatibility.
673
674 2009-03-11  Marek Safar  <marek.safar@gmail.com>
675
676         * typemanager.cs, generic.cs, parameter.cs, decl.cs, const.cs,
677         rootcontext.cs, namespace.cs, class.cs, delegate.cs, driver.cs,
678         generic-mcs.cs, attribute.cs, codegen.cs: Maintain predefined
679         attributes in their own structure. Needed when accessing their
680         properties before they are resolved.
681
682 2009-03-09  Marek Safar  <marek.safar@gmail.com>
683
684         * cs-tokenizer.cs: Optimized GetKeyword using an array instead of
685         hashtable (~10x faster).
686         
687         * driver.cs: Removed wrong Reset.
688
689 2009-03-08  Marek Safar  <marek.safar@gmail.com>
690
691         * class.cs: Use correct common base type for unmanaged delayed
692         check.
693
694         * rootcontext.cs: Wrap unhandled exception.
695
696 2009-03-06  Raja R Harinath  <harinath@hurrynot.org>
697
698         Make SeekableStreamReader self-tuning and arbitrarily seekable
699         * support.cs (SeekableStreamReader.ResetStream): New.  Allocates
700         the buffer.
701         (SeekableStreamReader.Position.set): Use it.  Simplify logic
702         which, as a side-effect, makes it arbitrarily-seekable.  Tune the
703         buffer size when the stream needs to be re-read from the beginning.
704
705 2009-03-05  Marek Safar  <marek.safar@gmail.com>
706
707         A fix for bug #480100
708         * parameter.cs: A parameter is not hoisted when used directly as ET.
709
710 2009-03-04  Marek Safar  <marek.safar@gmail.com>
711
712         * statement.cs: Fixed an issue when using variable is of interface
713         type.
714
715 2009-03-03  Marek Safar  <marek.safar@gmail.com>
716
717         A fix for bug #480319
718         * report.cs, driver.cs: Support -warnaserror-:<warning list> option.
719
720 2009-03-03  Marek Safar  <marek.safar@gmail.com>
721
722         A fix for bug #480867
723         * typemanager.cs, expression.cs, ecore.cs: Changed method group
724         expression to have no valid type.
725
726 2009-03-03  Marek Safar  <marek.safar@gmail.com>
727
728         A fix for bug #481258
729         * class.cs: Set extension method flag in partial container.
730
731 2009-03-03  Marek Safar  <marek.safar@gmail.com>
732
733         * statement.cs, typemanager.cs: Use expression for StringEmitter.
734         
735         * attribute.cs: Add sanity check.
736
737 2009-02-27  Marek Safar  <marek.safar@gmail.com>
738
739         * class.cs: Add external constructor error.
740
741 2009-02-26  Marek Safar  <marek.safar@gmail.com>
742
743         A fix for bug #475354
744         * convert.cs, nullable.cs, expression.cs, statement.cs: Emit
745         correctly user defined nullable equality operators.
746
747 2009-02-25  Marek Safar  <marek.safar@gmail.com>
748
749         A fix for bug #479532
750         * expression.cs: Implement NewInitialize::AddressOf.
751
752 2009-02-25  Marek Safar  <marek.safar@gmail.com>
753
754         A fix for bug #413633
755         * expression.cs: Iterate all base class-constraint types.
756
757 2009-02-24  Marek Safar  <marek.safar@gmail.com>
758
759         A fix for bug #479209
760         * literal.cs: Mutate null underlying type.
761
762 2009-02-24  Marek Safar  <marek.safar@gmail.com>
763
764         A fix for bug #476295
765         * convert.cs: Avoid wrapping implicitly convertible reference type.
766
767 2009-02-23  Marek Safar  <marek.safar@gmail.com>
768
769         * iterators.cs: Create MemberName correctly.
770
771 2009-02-23  Marek Safar  <marek.safar@gmail.com>
772
773         A fix for bug #478655
774         * literal.cs: Check also underlying null type conversion.
775
776 2009-02-21  Marek Safar  <marek.safar@gmail.com>
777
778         * generic.cs, ecore.cs, class.cs: Removed redundant AsAccessible.
779
780 2009-02-20  Marek Safar  <marek.safar@gmail.com>
781
782         A fix for bug #477447
783         * statement.cs: Add reference to correct parent storey when this
784         is accessible from deep children storey (more than 1 level).
785
786 2009-02-19  Marek Safar  <marek.safar@gmail.com>
787
788         A fix for bug #475860 by David Mitchell <dmitchell@logos.com>
789         * class.cs: Define base type members before setting up member cache.
790
791 2009-02-18  Marek Safar  <marek.safar@gmail.com>
792
793         A fix for bug #477378
794         * nullable.cs, expression.cs, statement.cs: More precise null type
795         sanity checks.
796
797 2009-02-18  Marek Safar  <marek.safar@gmail.com>
798
799         A fix for bug #472805
800         * typemanager.cs, namespace.cs: Import only visible extension method
801         types.
802
803 2009-02-18  Marek Safar  <marek.safar@gmail.com>
804
805         A fix for bug #476895
806         * attribute.cs: Use correct resolve context for attribute type.
807
808 2009-02-18  Marek Safar  <marek.safar@gmail.com>
809
810         A fix for bug #476266
811         * anonymous.cs: Mutate multi-dimensional arrays.
812
813 2009-02-18  Marek Safar  <marek.safar@gmail.com>
814
815         A fix for bug #476400
816         * statement.cs, expression.cs: Removed wrong Dispose optimization.
817
818 2009-02-18  Marek Safar  <marek.safar@gmail.com>
819
820         A fix for bug #476811
821         * generics.cs: Fixed null-literal check.
822
823 2009-02-17  Marek Safar  <marek.safar@gmail.com>
824
825         * typemanager.cs, convert.cs, flowanalysis.cs, driver.cs,
826         expression.cs, ecore.cs, rootcontext.cs, eval.cs, class.cs: More
827         messing with static variables.
828
829 2009-02-16  Marek Safar  <marek.safar@gmail.com>
830
831         A fix for bug #475965
832         * generics.cs: Check generic parameter type after extracting from
833         Expression<T>.
834
835 2009-02-16  Marek Safar  <marek.safar@gmail.com>
836
837         A fix for bug #475823
838         * convert.cs, expression.cs, literal.cs, ecore.cs, cfold.cs: Add
839         typed-null support.
840
841 2009-02-14  Marek Safar  <marek.safar@gmail.com>
842
843         * modifiers.cs, decl.cs, ecore.cs, class.cs, flowanalysis.cs:
844         Simplified event field definition using backing field and not
845         field builder directly.
846
847         * expression.cs (EmitLdArg): Optimize fast paths.
848
849 2009-02-13  Marek Safar  <marek.safar@gmail.com>
850
851         A fix for bug #475327
852         * expression.cs (ArrayCreation): Don't mutate values optimized away.
853
854 2009-02-13  Marek Safar  <marek.safar@gmail.com>
855
856         A fix for bug #475342
857         * cs-parser.jay: Using 'super' instead of 'base' to call base
858         constructor crashes compiler.
859
860 2009-02-13  Marek Safar  <marek.safar@gmail.com>
861
862         A fix for bug #475354
863         * expression.cs (Constantify): Add nullable types.
864         
865         * const.cs (EmitDecimalConstant): Avoid explicit cast.
866
867 2009-02-12  Marek Safar  <marek.safar@gmail.com>
868
869         A fix for bug #475246
870         * expression.cs: More broken flowanalysis hacking needed.
871
872 2009-02-12  Marek Safar  <marek.safar@gmail.com>
873
874         * attribute.cs: Compare only ref/out array modifiers. 
875
876 2009-02-11  Marek Safar  <marek.safar@gmail.com>
877
878         * statement.cs: Use member cache when looking for foreach members.
879
880 2009-02-11  Marek Safar  <marek.safar@gmail.com>
881
882         * expression.cs: Don't expose internal initializer types.
883         
884         * statement.cs: Check also explicit conversions for goto case.
885
886 2009-02-11  Marek Safar  <marek.safar@gmail.com>
887
888         * convert.cs, statement.cs: Removed usage of IsAssignableFrom.
889
890 2009-02-10  Marek Safar  <marek.safar@gmail.com>
891
892         * *.cs: Replace null-type with NullLiteral where appropriate.
893
894 2009-02-09  Marek Safar  <marek.safar@gmail.com>
895
896         * expression.cs: Initializer of reference argument use temporary
897         variable to be verifiable.
898         
899         * parameter.cs: Share EmitLdArg.
900
901 2009-02-09  Marek Safar  <marek.safar@gmail.com>
902
903         A fix for bug #473559
904         * class.cs: Fixed: Not reporting error about nested class with the
905         same name.
906
907 2009-02-06  Scott Peterson  <lunchtimemama@gmail.com>
908
909         Contributed under the MIT/X11 license.
910
911         * generic.cs: Added VerifyVariantTypeParameters which performs new
912         variance verification logic. The old logic, based on the spec, was
913         wrong because the spec is full of LIES!
914
915         * generic-mcs.cs: Stubbed out the VerifyVariantTypeParameters method.
916
917         *typemanager.cs: Moved variance verification logic to GenericTypeExpr.
918
919         * class.cs:
920         * ecore.cs: Added calls to the new variance verification logic.
921
922         * parameter.cs:
923         * delegate.cs: Removed calls to the old variance verification logic.
924
925 2009-02-06  Marek Safar  <marek.safar@gmail.com>
926
927         * delegate.cs: Use cached Invoke method directly.
928
929 2009-02-06  Marek Safar  <marek.safar@gmail.com>
930
931         * expression.cs: Emit expression tree for hoisted variable access.
932
933 2009-02-04  Marek Safar  <marek.safar@gmail.com>
934
935         * namespace.cs: Add better extension class check.
936
937 2009-02-05  Scott Peterson  <lunchtimemama@gmail.com>
938
939         * generic.cs: Fixed typeo (TypeParameter.Variacne).
940
941 2009-02-04  Scott Peterson  <lunchtimemama@gmail.com>
942
943         This patch adds initial generic variance support to the compiler.
944         It is contributed under the MIT/X11 license.
945
946         * typemanager.cs: Modified ImplementsInterface to check variance.
947         Added VerifyVariantTypeParameters which checks the specified type to see
948         if it uses a variant type parameter as a type argument (which is not
949         allowed). Added IsVariantOf which determins if the first type is a
950         variant of the second. NOTE: This only supports reference types at
951         the moment to conform with the current level of VM support. When the
952         VM supports value types, this will follow step.
953
954         * generic.cs: Added the Variance enum. Added a Variance property to
955         TypeParameter and added variance support to definition phase. Added a
956         Variance property to TypeParameterName. Also check to make sure that
957         no variant types appear in generic method parameters.
958
959         * cs-tokenizer.cs: Modified parse_less_than to tokenize the variance
960         keywords if the langversion supports it.
961
962         * parameter.cs: Added Parameter.VerifyNoVariantTypeParameters to ensure
963         that variant types are only used in legal positions. Also added
964         ParametersCompiled.VerifyNoVariantTypeParameters to check all of its
965         parameters.
966
967         * decl.cs: Construct TypeParameter with the variance information.
968
969         * convert.cs: Checks variance in ImplicitReferenceConversionExists
970         and ImplicitConversionStandard.
971
972         * rootcontext.cs: Added new "Future" language version.
973
974         * class.cs: In TypeContainer.DoDefineMembers, ensure that contravariant
975         type parameters are not used as type arguments in interface inheritance.
976         In MemberBase.DoMemberDependentChecks, ensure that contravariant type
977         parameters are not used as method return types. In MemberBase.
978         ResolveMemberType, ensure that variant type parameters are not used
979         as type arguments. Also call VerifyNoVariantTypeParameters on every
980         set of parameters which are resolved.
981
982         * delegate.cs: Modified Delegate.Define to ensure that variant
983         parameters are not used as type arguments and that a contravariant
984         parameter is not used as the return type. Also call
985         VerifyNoVariantTypeParameters on the delegate parameters.
986
987         * cs-parser.jay: Modified grammar to support "in" and "out" keywords
988         to specify generic variance.
989
990         * driver.cs: Added support for LanguageVersion.Future in the form of
991         "-langversion:future".
992
993         * generic-mcs.cs: Stubbed out new members in generic.cs.
994
995 2009-02-03  Marek Safar  <marek.safar@gmail.com>
996
997         * class.cs, generic.cs: Emit type parameter constraints for nested
998         types.
999
1000 2009-02-02  Marek Safar  <marek.safar@gmail.com>
1001
1002         A fix for bug #471213
1003         * class.cs: Avoid emitting backing field for abstract event fields.
1004
1005 2009-02-01  Marek Safar  <marek.safar@gmail.com>
1006
1007         A fix for bug #359731
1008         * cs-tokenizer.cs, cs-parser.jay: Correctly parse nested query
1009         expressions.
1010
1011 2009-01-30  Marek Safar  <marek.safar@gmail.com>
1012
1013         A fix for bug #470767
1014         * statement.cs: Introduced BlockScopeExpression, needed when 
1015         expression tree conversion has to emit scope variables.
1016
1017 2009-01-29  Marek Safar  <marek.safar@gmail.com>
1018
1019         * class.cs: Remove duplicate CallingConvention.
1020
1021 2009-01-29  Marek Safar  <marek.safar@gmail.com>
1022
1023         *.cs: Rename Parameters to ParametersCompiled and ParametersImported
1024         when I finally found the right naming convention.
1025
1026 2009-01-29  Marek Safar  <marek.safar@gmail.com>
1027
1028         * cs-tokenizer.cs: Put back different open parens optimization.
1029
1030 2009-01-28  Marek Safar  <marek.safar@gmail.com>
1031
1032         A fix for bug #470227
1033         * cs-tokenizer.cs: Remove too agressive parser optimization.
1034
1035 2009-01-28  Marek Safar  <marek.safar@gmail.com>
1036
1037         A fix for bug #324319
1038         * class.cs: Remove too early base type resolve.
1039
1040 2009-01-27  Marek Safar  <marek.safar@gmail.com>
1041
1042         A fix for bug #324319
1043         * ecore.cs: Explicitly type null when assigning to type argument to
1044         make pass verifier check.
1045
1046 2009-01-27  Marek Safar  <marek.safar@gmail.com>
1047
1048         * anonymous.cs: Fixed recent regression when initializing captured 
1049         this.
1050
1051 2009-01-26  Marek Safar  <marek.safar@gmail.com>
1052
1053         A fix for bug #469019
1054         * anonymous.cs: Use all parent type parameters when instantiating
1055         nested generic storey.
1056
1057 2009-01-26  Marek Safar  <marek.safar@gmail.com>
1058
1059         * expression.cs: Check for null instance methodgroup expression.
1060
1061 2009-01-26  Marek Safar  <marek.safar@gmail.com>
1062
1063         A fix for bug #469244
1064         * cs-tokenizer.cs, cs-parser.jay: Fixed parsing of nullable type
1065         instance inside a conditional expression.
1066
1067 2009-01-23  Marek Safar  <marek.safar@gmail.com>
1068
1069         * typemanager.cs, generic.cs, parameter.cs, decl.cs, anonymous.cs,
1070         expression.cs, report.cs, ecore.cs, attribute.cs: Use common 
1071         GetElementType and HasElementType. IsValueType clean up.
1072
1073 2009-01-23  Marek Safar  <marek.safar@gmail.com>
1074
1075         * nullable.cs: Use common EmitCall.
1076         
1077         * expression.cs: Emit constraint. for virtual calls only.
1078
1079 2009-01-23  Marek Safar  <marek.safar@gmail.com>
1080
1081         * typemanager.cs, generic.cs, eval.cs, convert.cs, const.cs, 
1082         expression.cs, statement.cs, rootcontext.cs, ecore.cs, class.cs,
1083         driver.cs, attribute.cs, enum.cs: Split IsValueType and IsStruct
1084         checks.
1085
1086 2009-01-22  Jb Evain  <jbevain@novell.com>
1087
1088         * anonymous.cs: make anonymous types' ToString implementation
1089         match what csc outputs.
1090
1091 2009-01-21  Marek Safar  <marek.safar@gmail.com>
1092
1093         * typemanager.cs, ecore.cs, iterator.cs: TypeLookupExpression clean
1094         up.
1095
1096 2009-01-17  Marek Safar  <marek.safar@gmail.com>
1097
1098         * convert.cs, ecore.cs: Explicitly casts type arguments to pass
1099         verifier checks.
1100
1101 2009-01-16  Marek Safar  <marek.safar@gmail.com>
1102
1103         * nullable.cs (LiftedBinaryOperator): Check for all possible null
1104         expressions.
1105
1106 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1107
1108         A fix for bug #466634
1109         * statement.cs: Add reference for nested storey when only this
1110         is captured.
1111
1112 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1113
1114         A fix for bug #466474
1115         * codegen.cs: Emit SecurityPermissionAttribute when -unsafe option
1116         was specified.
1117
1118 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1119
1120         * iterators.cs, anonymous.cs, expression.cs, statement.cs, ecore.cs:
1121         Fixed nested stories parent referencing process. Also fixes #463985.
1122
1123 2009-01-06  Marek Safar  <marek.safar@gmail.com>
1124
1125         * decl.cs, iterators.cs, expression.cs, statement.cs, doc.cs, 
1126         class.cs, cs-parser.jay, codegen.cs: Clean up destructor
1127         implementation. Also fixes #463108.
1128
1129 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1130
1131         A fix for bug #416109
1132         * decl.cs: Issue correct CLSAttribute warning location.
1133
1134 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1135
1136         A fix for bug #456775
1137         * attribute.cs: Use attribute owner scope when resolving attribute
1138         arguments.
1139
1140 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1141
1142         A fix for bug #457257
1143         * decl.cs: Fixed incorrect member declaring type comparison.
1144
1145 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1146
1147         A fix for bug #460896
1148         * driver.cs: Handle /RES resources as embeddable.
1149
1150 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1151
1152         A fix for bug #462515
1153         * ecore.cs: Report inacessible members upwards.
1154
1155 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1156
1157         A fix for bug #463190, #463192
1158         * decl.cs, namespace.cs: Also import internal extension classes.
1159
1160 2009-01-04  Marek Safar  <marek.safar@gmail.com>
1161
1162         A fix for bug #463415
1163         * generic.cs: Use right index for RemoveDependentTypes.
1164
1165 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1166
1167         A fix for bug #463196
1168         * expression.cs: Fixed enum to null comparison.
1169
1170 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1171
1172         A fix for bug #463121
1173         * nullable.cs: Fixed nullable user equality operator comparison.
1174
1175 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1176
1177         A fix for bug #462950
1178         * class.cs, decl.cs: Use full explicit name when defining automatic
1179         property backing field.
1180
1181 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1182
1183         A fix for bug #462592
1184         * pending.cs: Emit type arguments for generic proxy method.
1185
1186 2008-12-30  Marek Safar  <marek.safar@gmail.com>
1187
1188         * expression.cs (As): Mutate all type arguments.
1189
1190 2008-12-29  Marek Safar  <marek.safar@gmail.com>
1191
1192         A fix for bug #462622
1193         * anonymous.cs: Resolve anonymous type GetHashCode in unchecked
1194         context.
1195
1196 2008-12-29  Marek Safar  <marek.safar@gmail.com>
1197
1198         A fix for bug #450782
1199         * ecore.cs: Consider more variables of form V.I to be fixed.
1200
1201 2008-12-29  Marek Safar  <marek.safar@gmail.com>
1202
1203         A fix for bug #460712
1204         * typemanager.cs: Core types could be imported.
1205
1206 2008-12-28  Marek Safar  <marek.safar@gmail.com>
1207
1208         A fix for bugs #460847, #460772, #458049, #457339, #447807
1209         * generic.cs, parameter.cs, lambda.cs, linq.cs, anonymous.cs
1210         statement.cs, ecore.cs, class.cs, delegate.cs, flowanalysis.cs
1211         cs-parser.jay, driver.cs: LINQ implementation upgrade to deal with
1212         user lambdas used inside query clauses.
1213
1214 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1215
1216         A fix for bug #460229
1217         * cs-tokenizer.cs: Ignore wrongly placed BOM markers.
1218
1219 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1220
1221         A fix for bug #459952
1222         * decl.cs, namespace.cs: Use common CheckAccessLevel.
1223
1224 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1225
1226         A fix for bug #459630
1227         * convert.cs: Enum to valuetype conversion is not allowed.
1228
1229 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1230
1231         A fix for bug #457087
1232         * generic.cs: Don't crash when constraint comes from type
1233         declaration.
1234
1235 2008-12-16  Marek Safar  <marek.safar@gmail.com>
1236
1237         A fix for bug #459221
1238         * anonymous.cs, statement.cs: Delay only captured this
1239         initialization.
1240
1241 2008-12-12  Marek Safar  <marek.safar@gmail.com>
1242
1243         A fix for bug #457489
1244         * anonymous.cs, statement.cs: Split anonymous storey instantiation
1245         and initialization to capture scope initializers correctly.
1246
1247 2008-12-11  Marek Safar  <marek.safar@gmail.com>
1248
1249         * generic.cs, parameter.cs, expression.cs, statement.cs, doc.cs:
1250         ParameterReference refactoring.
1251
1252 2008-12-03  Marek Safar  <marek.safar@gmail.com>
1253
1254         * typemanager.cs, namespace.cs, driver.cs: Allow ExtensionAttribute
1255         to be imported from any assembly.
1256
1257 2008-12-03  Marek Safar  <marek.safar@gmail.com>
1258
1259         * parameter.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs
1260         statement.cs, class.cs, cs-parser.jay: Removed duplicate parameters
1261         from anonymous method and lambda expression.
1262
1263 2008-12-01  Marek Safar  <marek.safar@gmail.com>
1264
1265         A fix for bug #448560
1266         * expression.cs (As): Box any generic type arguments to be
1267         verifiable.
1268
1269 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
1270
1271         Add tripwire for implicit conversion bugs
1272         * ecore.cs (MethodGroupExpr.Error_ArgumentCountWrong): New helper
1273         for CS1501 error.
1274         (MethodGroupExpr.OverloadResolve): Add sanity check between
1275         IsApplicable and VerifyArgumentsCompat.
1276         (VerifyArgumentsCompat): Report CS1501 where appropriate.
1277
1278 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
1279
1280         Fix build break in System.Data_test
1281         * convert.cs (ImplicitConversionExists): Move NullLiteral
1282         conversions ...
1283         (ImplicitStandardConversionExists): ... here.
1284
1285 2008-11-28  Marek Safar  <marek.safar@gmail.com>
1286
1287         * literal.cs: Emit correctly explicit null to nullable cast.
1288
1289 2008-11-28  Marek Safar  <marek.safar@gmail.com>
1290
1291         * ecore.cs, generics.cs: Fixed crash when type arguments fail to
1292         resolve.
1293
1294 2008-11-28  Marek Safar  <marek.safar@gmail.com>
1295
1296         A fix for bug #449005
1297         * convert.cs, nullable.cs: Use only one implicit nullable
1298         conversion.
1299
1300 2008-11-27  Marek Safar  <marek.safar@gmail.com>
1301
1302         * convert.cs, literal.cs: More Convert cleanup is needed.
1303
1304 2008-11-27  Marek Safar  <marek.safar@gmail.com>
1305
1306         * decl.cs, class.cs: Fixed misleading error message.
1307
1308 2008-11-26  Marek Safar  <marek.safar@gmail.com>
1309
1310         A fix for bug #449005
1311         * nullable.cs (EmitEquality): Disable optimization for user operator
1312         operands.
1313
1314 2008-11-25  Marek Safar  <marek.safar@gmail.com>
1315
1316         A fix for bug #447027
1317         * anonymous.cs (HoistedVariable): Cache also outer access to deal
1318         with context variables stored as expression instances.
1319
1320 2008-11-25  Marek Safar  <marek.safar@gmail.com>
1321
1322         A fix for bug #447027
1323         * delegate.cs: Fixed delegate VerifyMethod logic.
1324
1325 2008-11-24  Marek Safar  <marek.safar@gmail.com>
1326
1327         * ecore.cs, delegate.cs: MethodGroup expressions can be applicable
1328         but not verifiable.
1329
1330 2008-11-21  Marek Safar  <marek.safar@gmail.com>
1331
1332         * typemanager.cs, decl.cs, anonymous.cs, class.cs, enum.cs: Rewrote
1333         member type resolve to follow normal flow, instead of random
1334         property access.
1335
1336 2008-11-21  Marek Safar  <marek.safar@gmail.com>
1337
1338         * iterators.cs (GetEnumeratorStatement): Re-use already resolved
1339         type.
1340
1341 2008-11-21  Marek Safar  <marek.safar@gmail.com>
1342
1343         * const.cs: Emit decimal array constant as literal.
1344
1345 2008-11-20  Marek Safar  <marek.safar@gmail.com>
1346
1347         * iterators.cs, ecore.cs: Removed CurrentBlock statement.
1348
1349 2008-11-19  Marek Safar  <marek.safar@gmail.com>
1350
1351         * eval.cs, location.cs, driver.cs (Location.SourceFiles): Turned
1352         into real property (saves 8 MB for corlib compilation).
1353
1354 2008-11-19  Marek Safar  <marek.safar@gmail.com>
1355
1356         * generic.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs,
1357         nullable.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay
1358         generic-mcs.cs: Small cleanup of TypeArguments.
1359
1360 2008-11-18  Marek Safar  <marek.safar@gmail.com>
1361
1362         * generic.cs, iterators.cs, anonymous.cs, nullable.cs, ecore.cs,
1363         expression.cs, namespace.cs, generic-mcs.cs, class.cs: Small cleanup
1364         of ConstructedType expression, renamed to GenericTypeExpr.
1365
1366 2008-11-17  Marek Safar  <marek.safar@gmail.com>
1367
1368         A fix for bug #445303
1369         * location.cs (IsConditionalDefined): Handle undefined global
1370         defines.
1371
1372 2008-11-17  Marek Safar  <marek.safar@gmail.com>
1373
1374         A fix for bug #444678
1375         * expression.cs (TryReduceConstant): Always create new constant
1376         instance.
1377
1378 2008-11-17  Marek Safar  <marek.safar@gmail.com>
1379
1380         A fix for bug #444673
1381         * ecore.cs: Ignore open generic types when used as generic type
1382         instance fields.
1383
1384 2008-11-17  Marek Safar  <marek.safar@gmail.com>
1385
1386         A fix for bug #445458
1387         * expression.cs, cs-parser.jay: Don't crash when an expression
1388         statement is null.
1389
1390 2008-11-17  Marek Safar  <marek.safar@gmail.com>
1391
1392         A fix for bug #445464
1393         * expression.cs, cs-parser.jay: Fixed typeof of non-generic type
1394         inside unbound type.
1395
1396 2008-11-14  Jb Evain  <jbevain@novell.com>
1397
1398         * driver.cs: ignore empty -nowarn argument such as
1399         the one in -nowarn:12,13,,.
1400
1401 2008-11-13  Marek Safar  <marek.safar@gmail.com>
1402
1403         A fix for bug #444271
1404         * anonymous.cs: Rescan parent storeys when best candidate was
1405         undone.
1406
1407 2008-11-13  Marek Safar  <marek.safar@gmail.com>
1408
1409         * generic.cs, expression.cs, ecore.cs, cs-parser.jay: Removed
1410         useless UnboundTypeExpression.
1411         
1412         * attribute.cs: Do check obsolete attribute on generic types.
1413
1414 2008-11-12  Marek Safar  <marek.safar@gmail.com>
1415
1416         A fix for bugs #425680, #400139
1417         * ecore.cs, expression.cs: Trying to do some almost_matched_members
1418         refactoring.
1419
1420 2008-11-11  Marek Safar  <marek.safar@gmail.com>
1421
1422         A fix for bug #435747
1423         * assign.cs, expression.cs: Cleanup New assignment to emit correcly
1424         compound value types assignment. Few micro optimizations added.
1425
1426 2008-11-10  Marek Safar  <marek.safar@gmail.com>
1427
1428         A fix for bug #442610
1429         * anonymous.cs (MutateConstructor): More SRE hacking.
1430
1431 2008-11-10  Marek Safar  <marek.safar@gmail.com>
1432
1433         A fix for bug #442579
1434         * ecore.cs: Also initialize expanded form of a method with 1 params
1435         parameter.
1436
1437 2008-11-06  Marek Safar  <marek.safar@gmail.com>
1438
1439         * expression.cs (UnaryMutator): Do early l-side check.
1440
1441 2008-11-05  Miguel de Icaza  <miguel@novell.com>
1442
1443         * codegen.cs (InitDynamic): also setup Assembly.Name like we do in
1444         Init, otherwise we would crash later on when checking for friend
1445         assemblies. 
1446
1447         * eval.cs: Do not hide errors from invalid calls to LoadAssembly.
1448         Otherwise we never get any meaningful information as to what
1449         failed. 
1450
1451 2008-11-05  Marek Safar  <marek.safar@gmail.com>
1452
1453         A fix for bug #436318
1454         * driver.cs, report.cs: Add -warnaserror:Wn to command line options.
1455
1456 2008-11-05  Miguel de Icaza  <miguel@novell.com>
1457
1458         * namespace.cs: Turns out that it was a really bad idea to hide
1459         the errors for namespaces not found here in eval mode.    
1460
1461         * eval.cs: When we process using clauses, only enter those into
1462         the list of valid using clauses after they have been validated.   
1463
1464         The above change gives the proper semantics: it does not
1465         senselessly report the same errors with broken using statements by
1466         never storing them in the first place when they are invalid.
1467
1468 2008-11-05  Marek Safar  <marek.safar@gmail.com>
1469
1470         A fix for bug #421839
1471         * cs-parser.jay: Remove expression from coalesce rule to force lower
1472         priority than the assignment operator.
1473
1474 2008-11-05  Marek Safar  <marek.safar@gmail.com>
1475
1476         A fix for bug #437875
1477         * nullable.cs: Compile correctly method group operand used with null
1478         coalescing operator.
1479
1480 2008-11-04  Marek Safar  <marek.safar@gmail.com>
1481
1482         A fix for bug #434589
1483         * expression.cs (Binary): Ignore lifted conversions when at least
1484         one operand is of reference type.
1485
1486 2008-11-04  Marek Safar  <marek.safar@gmail.com>
1487
1488         * cs-parser.jay: Better syntax error report.
1489
1490 2008-11-03  Marek Safar  <marek.safar@gmail.com>
1491
1492         A fix for bug #436792
1493         * cs-parser.jay: Use GetLocation to access location.
1494
1495 2008-11-03  Marek Safar  <marek.safar@gmail.com>
1496
1497         A fix for bug #440774
1498         * cs-parser.jay: Also set current_array_type when parsing local
1499         variables types.
1500
1501 2008-11-03  Marek Safar  <marek.safar@gmail.com>
1502
1503         A fix for bug #440785
1504         * expression.cs (As): Don't resolve self modifing expression
1505         multiple times.
1506
1507 2008-11-03  Marek Safar  <marek.safar@gmail.com>
1508
1509         A fix for bug #439447
1510         * cs-tokenizer.cs: Tokenize surrogates only where allowed.
1511
1512 2008-11-03  Marek Safar  <marek.safar@gmail.com>
1513
1514         A fix for bug #437571
1515         * cs-parser.jay: Fixes internal error for invalid expression
1516         statements.
1517
1518 2008-10-17  Marek Safar  <marek.safar@gmail.com>
1519
1520         * ecore.cs: Resolve correctly ambiguous params delegate methods.
1521
1522 2008-10-17  Marek Safar  <marek.safar@gmail.com>
1523
1524         * generic.cs, anonymous.cs: Simplified GetDeclarations.
1525
1526 2008-10-17  Marek Safar  <marek.safar@gmail.com>
1527
1528         * cs-tokenizer.cs: More precise cast parsing.
1529
1530 2008-10-16  Martin Baulig  <martin@ximian.com>
1531
1532         * anonymous.cs (AnonymousMethodStorey): Put back the
1533         `hoisted_locals' hashtable and use it in EmitType().
1534
1535 2008-10-15  Marek Safar  <marek.safar@gmail.com>
1536
1537         * cs-tokenizer.cs, nullable.cs, expression.cs, statement.cs,
1538         cs-parser.jay: Tokenizer optimizations and memory reduction, saves
1539         ~5MB for corlib.
1540
1541 2008-10-14  Marek Safar  <marek.safar@gmail.com>
1542
1543         * cs-tokenizer.cs: Add bool type to the list of valid cast tokens.
1544
1545 2008-10-14  Marek Safar  <marek.safar@gmail.com>
1546
1547         * statement.cs: Mutate scope initializers.
1548
1549 2008-10-14  Marek Safar  <marek.safar@gmail.com>
1550
1551         * expression.cs: Use typeless value for This constant.
1552         
1553         * ecore.cs: Access FieldInfo via GetConstructedFieldInfo.
1554
1555 2008-10-14  Marek Safar  <marek.safar@gmail.com>
1556
1557         * cs-tokenizer.cs, cs-parser.jay: Unify context sensite keyword
1558         tokenizer.
1559
1560 2008-10-13  Marek Safar  <marek.safar@gmail.com>
1561
1562         * cs-tokenizer.cs: Add missing alias qualifier and dotted generic
1563         type to type cast.
1564
1565 2008-10-13  Marek Safar  <marek.safar@gmail.com>
1566
1567         * cs-tokenizer.cs, expression.cs, cs-parser.jay: Reworked parens
1568         parser and tokenizer. Fixes many ambiguities including #433258.
1569
1570 2008-10-10  Marek Safar  <marek.safar@gmail.com>
1571
1572         * cs-parser.jay: Fixed missing accessor recovery.
1573
1574 2008-10-10  Marek Safar  <marek.safar@gmail.com>
1575
1576         A fix for bug #433701
1577         * expression.cs: Better error message.
1578
1579 2008-10-10  Marek Safar  <marek.safar@gmail.com>
1580
1581         * cs-parser.jay, expression.cs: Start reporting real parser errors.
1582         
1583         * Makefile: Disabled unused debug symbols.
1584
1585         Also fixes: #320556, #321097, #321656, #321876, #351316
1586
1587 2008-10-09  Miguel de Icaza  <miguel@novell.com>
1588
1589         * eval.cs: rename "<interactive>" to "{interactive}", to work
1590         around a requirement in the compiler that this be a valid
1591         filename, and in Windows it is not (433886).
1592
1593 2008-10-09  Marek Safar  <marek.safar@gmail.com>
1594
1595         * cs-tokenizer.cs, cs-parser.jay: Fixed more subtle parser problems
1596
1597 2008-10-08  Marek Safar  <marek.safar@gmail.com>
1598
1599         * cs-tokenizer.cs, eval.cs, anonymous.cs, statement.cs, class.cs
1600         cs-parser.jay: Generic type declaration and type arguments cleanup.
1601
1602 2008-10-05  Marek Safar  <marek.safar@gmail.com>
1603
1604         * cs-parser.jay: Allow parsing weird array creation construct.
1605
1606 2008-10-05  Marek Safar  <marek.safar@gmail.com>
1607
1608         * cs-parser.jay: Conflicts reduction.
1609
1610 2008-10-04  Marek Safar  <marek.safar@gmail.com>
1611
1612         * cs-parser.jay: Conflicts reduction.
1613
1614 2008-10-04  Raja R Harinath  <harinath@hurrynot.org>
1615
1616         Fix #398325
1617         * flowanalysis.cs (MyBitvector.MakeShared): Rename from 'Shared'
1618         property.  Add a 'count' hint about the use of the shared vector.
1619         Ensure that we don't leak out dirty bits.
1620         (UsageVector.MergeChild): Throw away information about variables
1621         in child vectors.
1622         Based on patch and analysis by Moritz Kroll <Moritz.Kroll@gmx.de>.
1623
1624 2008-10-03  Marek Safar  <marek.safar@gmail.com>
1625
1626         A fix for bug #431746
1627         * iterators.cs, anonymous.cs: Re-initialize hoisted iterator
1628         parameters when iterator is created.
1629
1630 2008-10-03  Marek Safar  <marek.safar@gmail.com>
1631
1632         A fix for bug #431827
1633         * expression.cs: Fixed right based pointer arithmetic operations
1634         emit.
1635
1636 2008-10-03  Marek Safar  <marek.safar@gmail.com>
1637
1638         A fix for bug #353779
1639         * assign.cs, expression.cs: Fixed compound assignment conversions.
1640
1641 2008-10-02  Marek Safar  <marek.safar@gmail.com>
1642
1643         A fix for bug #375262
1644         * statement.cs: Refactor ArrayForeach to be usable with string
1645         indexer. Optimized single dimentional arrays foreach.
1646
1647 2008-10-02  Marek Safar  <marek.safar@gmail.com>
1648
1649         A fix for bug #431255
1650         * anonymous.cs, expression.cs: Removed broken optimization.
1651
1652 2008-10-01  Marek Safar  <marek.safar@gmail.com>
1653
1654         * anonymous.cs: Use full type parameters of parent generic
1655         containers. Removed unnecessary AddParentStoreyReference call.
1656
1657 2008-10-01  Marek Safar  <marek.safar@gmail.com>
1658
1659         A fix for bug #324702
1660         * class.cs: Use better shorter names for explicit interface member
1661         implementations.
1662
1663         * ecore.cs, typemanager.cs: Convert only mscorlib predefined names.
1664
1665 2008-10-01  Marek Safar  <marek.safar@gmail.com>
1666         
1667         * expression.cs: Use new interface to check fixed expression.
1668
1669 2008-10-01  Marek Safar  <marek.safar@gmail.com>
1670
1671         A fix for bug #421101
1672         * expression.cs, statement.cs, ecore.cs: Use IFixedExpression
1673         interface to check for fixed fixed-buffers.
1674
1675 2008-10-01  Marek Safar  <marek.safar@gmail.com>
1676
1677         A fix for bug #429264
1678         * assign.cs, anonymous.cs, ecore.cs: More type mutators added.
1679         
1680         * delegate.cs: Removed unnecessary casts.
1681
1682 2008-09-30  Marek Safar  <marek.safar@gmail.com>
1683
1684         A fix for bug #352151
1685         * decl.cs, iterators.cs, anonymous.cs, report.cs, namespace.cs,
1686         class.cs: Fixed already defined explicit interface members check.
1687
1688 2008-09-29  Rodrigo Kumpera  <rkumpera@novell.com>
1689
1690         cs-tokenizer.cs: Fix typo.
1691
1692 2008-09-28  Miguel de Icaza  <miguel@novell.com>
1693
1694         * eval.cs (InteractiveBase): The quit command now just sets a
1695         flag, instead of calling Environment.Exit(), it is milder on
1696         embedded hosts. 
1697
1698         CompiledMethod is now in Mono.CSharp, not nested inside
1699         the Evaluator, it was inconvenient to use.
1700
1701 2008-09-27  Miguel de Icaza  <miguel@novell.com>
1702
1703         * eval.cs (Evaluator): Introduce Compile method, to allow compiled
1704         code to be invoked without having to reparse.
1705
1706 2008-09-27  Miguel de Icaza  <miguel@novell.com>
1707
1708         * ecore.cs: The recent changes to FieldExpr broke this as well.
1709         Fixes LINQ queries in the interactive shell.
1710
1711         * Multiple files: indentation fixing for the Mono coding
1712         guidelines for the switch statement.
1713
1714         * eval.cs: Make the Evaluator API thread safe.
1715
1716 2008-09-26  Marek Safar  <marek.safar@gmail.com>
1717
1718         * anonymous.cs, statement.cs, class.cs, cs-parser.jay: Simplified
1719         constructor parsing.
1720
1721 2008-09-26  Marek Safar  <marek.safar@gmail.com>
1722
1723         A fix for bug #325326
1724         * statement.cs: Check possible mistaken empty statement using
1725         explicit blocks only.
1726
1727 2008-09-25  Miguel de Icaza  <miguel@novell.com>
1728
1729         * eval.cs (LoadAssembly, ReferenceAssembly): Call
1730         RootNamespace.ComputeNamespaces to update the internal list of
1731         namespaces, this is no longer done for us.
1732
1733         (InteractiveBase): Use the Evaluator APIs instead of calling into
1734         Driver directly
1735
1736 2008-09-25  Marek Safar  <marek.safar@gmail.com>
1737
1738         A fix for bug #429264
1739         * expression.cs: Missing mutator for access to multidimensional
1740         arrays.
1741
1742 2008-09-25  Marek Safar  <marek.safar@gmail.com>
1743
1744         * class.cs, statement: Emit DebuggerHidden attribute for iterator
1745         entry wrapper.
1746         
1747         * driver.cs: Missing input argument check.
1748
1749 2008-09-25  Marek Safar  <marek.safar@gmail.com>
1750
1751         * typemanager.cs, generic.cs, eval.cs, decl.cs, anonymous.cs,
1752         expression.cs, statement.cs, rootcontext.cs, class.cs, 
1753         cs-parser.jay, driver.cs, generic-mcs.cs, enum.cs: Removed obsolete
1754         DefineMembers.
1755
1756 2008-09-24  Miguel de Icaza  <miguel@novell.com>
1757
1758         * ecore.cs (FieldExpr): Only initialize eclass when we return a
1759         fully constructed FieldExpr, fixes the regression introduced in
1760         the last commit.
1761         
1762         * ecore.cs, expression.cs: Plug back the eclass initialization as
1763         otherwise it regresses `csharp'. 
1764
1765 2008-09-24  Marek Safar  <marek.safar@gmail.com>
1766
1767         * typemanager.cs, decl.cs, convert.cs, assign.cs, expression.cs,
1768         ecore.cs, attribute.cs: Moved obsolete method checks from emit
1769         phase to resolve phase. It resolves problems with expression trees
1770         and fixes bugs #323796, #325156.
1771
1772 2008-09-23  Marek Safar  <marek.safar@gmail.com>
1773
1774         * codegen.cs: Report better error when symbol writer is missing.
1775
1776 2008-09-23  Marek Safar  <marek.safar@gmail.com>
1777
1778         * codegen.cs: Set .NET symbol writer.
1779         
1780         * decl.cs: Guard against null generic arguments.
1781         
1782         * report.cs: Don't report exactly same additional details.
1783
1784 2008-09-22  Marek Safar  <marek.safar@gmail.com>
1785
1786         A fix for bug #324917
1787         * cs-parser.jay: Add missing multidimensional non-expression type
1788         ranks.
1789         
1790 2008-09-22  Marek Safar  <marek.safar@gmail.com>
1791
1792         A fix for bug #428191
1793         * anonymous.cs: Create an outer generic fields also for non-storey
1794         anonymous methods.
1795
1796 2008-09-22  Marek Safar  <marek.safar@gmail.com>
1797
1798         A fix for bug #378294
1799         * class.cs: Make fixed size buffers gmcs feature only.
1800
1801 2008-09-22  Marek Safar  <marek.safar@gmail.com>
1802
1803         A fix for bug #355622, #324993
1804         * assign.cs, const.cs, class.cs: Create new EmitContext for each
1805         field initializer.
1806
1807 2008-09-19  Marek Safar  <marek.safar@gmail.com>
1808
1809         * nullable.cs, expression.cs, namespace.cs, delegate.cs: Duplicate
1810         error reporting.
1811
1812 2008-09-19  Marek Safar  <marek.safar@gmail.com>
1813
1814         A fix for bug #416110
1815         * generic.cs: Struct constraint results in default ctor and
1816         ValueType base type constraint to be set.
1817
1818 2008-09-19  Marek Safar  <marek.safar@gmail.com>
1819
1820         A fix for bug #423791
1821         * generic.cs: Fixed params output type type-inference.
1822
1823 2008-09-19  Marek Safar  <marek.safar@gmail.com>
1824
1825         * cs-parser.jay, expression.cs: Fixed few expression crashes.
1826         
1827 2008-09-19  Marek Safar  <marek.safar@gmail.com>
1828
1829         * cs-tokenizer.cs: Don't break on extra partial modifier.
1830
1831 2008-09-19  Marek Safar  <marek.safar@gmail.com>
1832
1833         A fix for bug #427592
1834         * generic.cs: Use common parameter resolve method.
1835
1836 2008-09-18  Marek Safar  <marek.safar@gmail.com>
1837
1838         A fix for bug #414758
1839         * expression.cs, ecore.cs: Fixed crash when accessing non-static
1840         property.
1841
1842 2008-09-18  Marek Safar  <marek.safar@gmail.com>
1843
1844         * driver.cs, namespace.cs: Read types and namespaces after all
1845         requested assemblies are loaded, fixes issues with System.Core
1846         auto-reference, and #419888.
1847
1848 2008-09-18  Marek Safar  <marek.safar@gmail.com>
1849
1850         A fix for bug #417705
1851         * cs-parser.jay: Fixed as/is operator expression split.
1852
1853 2008-09-18  Marek Safar  <marek.safar@gmail.com>
1854
1855         * const.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay:
1856         Fixed expression tree representation of empty new expression and
1857         new initializer expression.
1858
1859 2008-09-18  Miguel de Icaza  <miguel@novell.com>
1860
1861         * eval.cs: Remove warning, keep reference to driver around.
1862
1863         * Hide fields that do not need to be public.
1864
1865 2008-09-17  Marek Safar  <marek.safar@gmail.com>
1866
1867         A fix for bug #426385
1868         * expression.cs (ImplicitlyTypedArrayCreation): Use full implicit
1869         conversion for array elements.
1870
1871 2008-09-17  Marek Safar  <marek.safar@gmail.com>
1872
1873         * expression.cs, statement.cs, class.cs, cs-parser.jay: Fixed
1874         void parsing conflicts.
1875
1876 2008-09-15  Marek Safar  <marek.safar@gmail.com>
1877
1878         A fix for bug #425601
1879         * driver.cs, typemanager.cs, namespace.cs: Automatically reference
1880         System.Core only when there is no custom ExtensionAttribute
1881         implementation.
1882
1883 2008-09-15  Miguel de Icaza  <miguel@novell.com>
1884
1885         * namespace.cs: Do not report CS0246 (name
1886
1887 2008-09-12  Marek Safar  <marek.safar@gmail.com>
1888
1889         A fix for bug #425669
1890         * generic.cs: Don't cache generic static anonymous method 
1891         containers.
1892
1893 2008-09-12  Marek Safar  <marek.safar@gmail.com>
1894
1895         * generic.cs, class.cs, delegate.cs: Check recursive inherited
1896         conflicting constraints.
1897
1898 2008-09-12  Raja R Harinath  <harinath@hurrynot.org>
1899
1900         * cs-tokenizer.cs (consume_identifier): Allow partial methods in
1901         mcs too.
1902
1903 2008-09-12  Marek Safar  <marek.safar@gmail.com>
1904
1905         * literal.cs, convert.cs, expression.cs, statement.cs: More null
1906         to null pointer conversion fixes.
1907
1908 2008-09-11  Marek Safar  <marek.safar@gmail.com>
1909
1910         * cs-parser.jay, expression.cs: An implicitly typed local variable
1911         declarator cannot use an array initializer.
1912
1913 2008-09-11  Marek Safar  <marek.safar@gmail.com>
1914
1915         * cs-parser.jay: Reduced number of printed tokens, add sorting.
1916
1917 2008-09-11  Marek Safar  <marek.safar@gmail.com>
1918
1919         * generic.cs (InflatedConstraints): Don't crash when constraints
1920         are different.
1921         
1922         * cs-parser.jay: const_declarator is a block.
1923
1924         * constant.cs: Check for not allowed NaN conversions.
1925
1926 2008-09-10  Miguel de Icaza  <miguel@novell.com>
1927
1928         * driver.cs: Drop --shell argument, the compiler is no longer a
1929         REPL. 
1930
1931         * eval.cs: Move most of the code that deals with evaluation into
1932         this file and document the public API from repl.cs
1933
1934         * repl.cs: Remove from here.
1935         
1936 2008-09-10  Marek Safar  <marek.safar@gmail.com>
1937
1938         A fix for bug #424684
1939         * generic.cs: Generic class constraints must come first.
1940
1941 2008-09-09  Miguel de Icaza  <miguel@novell.com>
1942
1943         * cs-parser.jay: Improve error reporting for syntax errors in
1944         statements and expressions, we now report the expected tokens
1945         instead of reporting the useless "; expected".
1946
1947         Drop the strings from the token declaration, it turns out that
1948         they did not do what I thought they did.  Instead they were adding
1949         two sets of tokens to the tables.
1950
1951 2008-09-09  Marek Safar  <marek.safar@gmail.com>
1952
1953         * typemanager.cs, generic.cs, parameter.cs, expression.cs, class.cs,
1954         delegate.cs: Share special type check.
1955
1956 2008-09-09  Marek Safar  <marek.safar@gmail.com>
1957
1958         A fix for bug #423981
1959         * expression.cs (EmitBranchable): Correctly emit inverted float conditions.
1960
1961 2008-09-09  Marek Safar  <marek.safar@gmail.com>
1962
1963         * ecore.cs (ReducedConstantExpression): Implemented ConvertExplicitly and
1964         ConvertImplicitly.
1965
1966 2008-09-09  Marek Safar  <marek.safar@gmail.com>
1967
1968         A fix for bugs: #324750, #335946
1969         * cs-tokenizer.cs, cs-parser.jay, expression.cs: Use a custom 
1970         lookup rule to determine ?-based tokens.
1971
1972 2008-09-08  Miguel de Icaza  <miguel@novell.com>
1973
1974         * repl.cs (OptionalAssign.EmitStatement): It is possible that some
1975         expressions (like event adding or removing) end up here, so we
1976         need to treat those as statements.
1977
1978         Add LoadAssembly method.
1979
1980 2008-09-04  Miguel de Icaza  <miguel@novell.com>
1981
1982         * repl.cs: Add Time method.
1983
1984 2008-09-05  Marek Safar  <marek.safar@gmail.com>
1985
1986         * cs-tokenizer.cs: Fixed swaped UTF-16 surrogates parsing.
1987
1988 2008-09-05  Miguel de Icaza  <miguel@novell.com>
1989
1990         * repl.cs: Add workaround for old compilers.
1991
1992 2008-09-04  Jb Evain  <jbevain@novell.com>
1993
1994         * repl.cs (PrettyPrint): pretty print everything that
1995         implements IDictionary, as well as IEnumerables. Also,
1996         add a quit helper property.
1997
1998 2008-09-04  Marek Safar  <marek.safar@gmail.com>
1999
2000         * constant.cs: Better error reporting for decimal literals.
2001         
2002         * class.cs, attribute.cs, typemanager.cs: Emit more fixed buffer
2003         field attributes.
2004         
2005 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2006                         Miguel de Icaza  <miguel@novell.com>
2007
2008         A fix for bug #422951
2009         * assign.cs (Assign.DoResolve): Perform the type conversions
2010         checks before we attempt to initialize `New' initializers. 
2011
2012 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2013
2014         A fix for bug #422853
2015         * delegate.cs (DelegateCreation): Add special handling for
2016         EmptyExpression.Null instance expression which is just another
2017         hack for undecided member instance exression.
2018
2019 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2020
2021         * expression.cs, ecore.cs: Emit full expression tree for reduced
2022         binary expressions.
2023
2024 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2025
2026         * expression.cs (This): Guard against multi-resolving.
2027         
2028         * ecore.cs, statement.cs (Throw): Simplified.
2029         
2030         * flowanalysis.cs: Also verify event fields.
2031
2032 2008-09-04  Miguel de Icaza  <miguel@novell.com>
2033
2034         * assign.cs (Assign.DoResolve): Perform the type conversions
2035         checks before we attempt to initialize `New' initializers. 
2036
2037         * repl.cs (PrettyPrint): Add Hashtable prettyprint
2038
2039         * anonymous.cs (AnonymousTypeClass): On EvalMode make the class
2040         public. 
2041
2042         * repl.cs: Update help.
2043
2044 2008-09-03  Miguel de Icaza  <miguel@novell.com>
2045
2046         * driver.cs (ProcessDefaultConfig): Now it encapsulates all the
2047         handling of the default config handling, including the special
2048         treatment of System.Core assembly. 
2049
2050         Fixes the REPL processing for LINQ.
2051
2052 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2053
2054         A fix for bug #422507
2055         * expression.cs (UnboxCast): Add missing child expression mutator.
2056
2057 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2058
2059         * driver.cs: Don't self reference System.Core assembly.
2060
2061 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2062
2063         A fix for bug #422507
2064         * expression.cs (StringConcat): Add missing type mutator.
2065
2066 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2067
2068         * generic.cs (TypeInferenceContext): Follow equality rule for
2069         constructed type lower bound type inference.
2070
2071 2008-09-02  Miguel de Icaza  <miguel@novell.com>
2072
2073         * getline.cs (CmdRefresh): Apply patch from Douglas S. Blank
2074         <dblank@cs.brynmawr.edu> which updates the cursor position on
2075         refresh.
2076         
2077 2008-09-02  Marek Safar  <marek.safar@gmail.com>
2078
2079         A fix for bug #367145
2080         * driver.cs: Fixed import of extension methods when using -noconfig
2081         option.
2082
2083 2008-09-02  Marek Safar  <marek.safar@gmail.com>
2084
2085         * iterator.cs: Don't emit GetEnumerator method twice but call a generic
2086         version from non-generic implementation instead.
2087
2088 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2089
2090         A fix for bug #418908
2091         * class.cs: Use AddScopeStatement for field initializers.
2092
2093 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2094
2095         A fix for bug #415385
2096         * ecore.cs, convert.cs: Do method group conversion for equal group types.
2097
2098 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2099
2100         A fix for bug #421736
2101         * iterators.cs: Don't crash on unreachable iterators.
2102
2103 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2104
2105         A fix for bug #421628
2106         * parameter.cs, attribute.cs: Clone also parameter attributes.
2107
2108 2008-08-30  Miguel de Icaza  <miguel@novell.com>
2109
2110         * namespace.cs (LookupType): In EvalMode, try to replace
2111         the TypeBuilder from our cache with a Type as Reflection.Emit does
2112         not  like to mix code from older assemblies emitted and new
2113         assemblies emitted. 
2114
2115         This sounds like a serious Mono bug that prevents multiple
2116         assemblies to be generated and consumed at the same time.
2117
2118         * cs-parser.jay (push_current_class): Do not make interactive
2119         classes internal or private, make them public as we currently
2120         generate each new class in a new assembly.   
2121
2122 2008-08-29  Miguel de Icaza  <miguel@novell.com>
2123
2124         * decl.cs, roottypes.cs, class.cs:: Add an infrastructure to
2125         remove types that are entered into the global namespace during
2126         parsing so that we can remove them on failure.
2127  
2128         * cs-parser.jay: Parsing: we now keep track of types that are
2129         entered into global variables and queue those in case the parsing
2130         or resolution fail.
2131  
2132         This happens in a few situations: during partial-input, we invoke
2133         the parser repeatedly for example with the string "class X", this
2134         would cause X to be registed, and we need to remove this
2135         registration so that another parse attempt later with say "class X {"
2136         would actually work.
2137  
2138         Additionally, if there is an error in the resolution phase, for
2139         example: "class X : NonExistant {}" th
2140         
2141         * cs-parser.jay: Be more precise with the errors being raised,
2142         instead of flagging all exceptions during parsing to be attributed
2143         to the parsing process, distinguish those from errors happening in
2144         the actions and hint that using -v would produce the actual
2145         exception. 
2146
2147         * repl.cs: Do not load all compiler references on each reset,
2148         doing the partial reset takes care of this.
2149         
2150 2008-08-28  Miguel de Icaza  <miguel@novell.com>
2151
2152         * repl.cs: Add support for loading all the files from
2153         ~/.config/csharp/*cs as startup scripts and ~/.config/csharp/*.dll
2154         as shell libraries.
2155
2156         Introduce a micro-parser that is able to deambiguate on its input
2157         whether we are dealing with a compilation unit (namespace, class,
2158         interface, struct, delegate) declaration or a statement.   This
2159         allows both declarations and statements to be entered. 
2160
2161         Set history size by default to 300 lines.
2162
2163         Instead of distinguishing based on the parser.InteractiveResult,
2164         have only two cases: statements were parsed, or a compilation unit
2165         was.   Always pull the Using statement additions from the
2166         compilation unit parse.
2167         
2168         * cs-tokenizer.cs: Rename tokens to better describe their intent
2169         (EvalStatementParserCharacter and EvalCompilationUnitParserCharacter).
2170         
2171         * rootcontext.cs: Split EvalMode into EvalMode and StatementMode.
2172         EvalMode is used to trigger the lookup of global variables while
2173         StatementMode is used turn variable declarations into static
2174         fields.
2175
2176         * getline.cs: Allow history size to be set.
2177         
2178 2008-08-29  Marek Safar  <marek.safar@gmail.com>
2179
2180         A fix for bug #360755
2181         * ecore.cs (SimpleName): Exclude indexers from simple name resolve.
2182
2183 2008-08-29  Marek Safar  <marek.safar@gmail.com>
2184
2185         * generic.cs, iterators.cs, codegen.cs: Removed unused variable.
2186         
2187         * typemanager.cs, statement.cs, ecore.cs, enum.cs: Don't reconstruct enum
2188         member name, it is too confusing
2189         
2190         * decl.cs, class.cs: Don't report unused fields with attached attribute.
2191         
2192         * rootcontext.cs: Finally default to warning level 4.
2193
2194 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2195
2196         * class.cs (CheckBase): Ignore overloaded operators.
2197
2198 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2199
2200         A fix for bug #420830
2201         * expression.cs, cs-parser.jay: Put back InvocationOrCast expression.
2202
2203 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2204
2205         A fix for bug #420832
2206         * anonymous.cs, iterators.cs: Also clone hoisted this iterator variable.
2207
2208 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2209
2210         A fix for bug #420386
2211         * nullables.cs: Fixed logic of nullable user comparison operators involving
2212         null values.
2213
2214 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2215         
2216         * attribute (IsClsCompliant): Use FALSE value for pointer types.
2217
2218 2008-08-27  Miguel de Icaza  <miguel@novell.com>
2219
2220         * repl.cs: Add support for aborting the running code with C-c. 
2221
2222 2008-08-27  Raja R Harinath  <harinath@hurrynot.org>
2223
2224         * cs-parser.jay (CS1002): Dump 'yyToken' with Report.ExtraInformation.
2225
2226 2008-08-27  Miguel de Icaza  <miguel@novell.com>
2227
2228         * cs-parser.jay (interactive_statement_list): A new set of rules
2229         for hosting statements that uses the "interactive_" prefix.   
2230
2231         * repl.cs: Add support for parsing `using' as a statement or as a
2232         directive.  Deambiguating before passing this to the parser.
2233
2234         We need to distinguish statement_expressions that occur at the
2235         toplevel vs those that occur embedded into expressions.
2236
2237         * getline.cs: Applied patch from Stuart Carnie <stuart.carnie@gmail.com> 
2238         that fixes the cursor key handling, and a history bug.
2239         
2240 2008-08-26  Miguel de Icaza  <miguel@novell.com>
2241
2242         * Makefile: Drop BOOTSTRAP_COMPILER as that was masking the
2243         limitations in Console, instead the 2.0 bootstrap libraries now
2244         include the Console bits.
2245
2246         Also, remove the use of Nullables from getline.cs
2247
2248         ------------
2249         
2250         Interactive support for the C# compiler.   Use gmcs --shell to
2251         enter a read-eval-print loop shell.
2252
2253         Docs: http://www.mono-project.com/CsharpRepl
2254         
2255         * sources: include repl.cs here and getline.cs for gmcs.exe,
2256         everything else is getline.cs impaired.
2257
2258         * Makefile: when bootstrapping pass a special flag
2259         BOOTSTRAP_COMPILER which we use to prevent failures in compilation
2260         as we use NET_2_0 define to pull 2.0 APIs from System.Console.
2261         This distinguishes those two cases.
2262
2263         * repl.cs: Support for a read-eval-print loop.   Will be soon
2264         refactored into eval support and then REPL on top of it.
2265
2266         * ecore.cs: If a simplename lookup fails, before erroring out,
2267         if we are in EvalMode to resolve the name to a declaration in the
2268         Eval-land.    
2269
2270         This means that variable declarations that happened in previous
2271         classes (as repl puts every statement in a separate class) are
2272         made visible in this way.
2273
2274         * cs-parser.jay: UnexpectedEOF, a new flag that is set if we
2275         triggered an error due to the end of file being reached.   This is
2276         used to do multi-line input, and notify the caller that the user
2277         needs to provide more text before a successful parse.
2278
2279         Add new grammar rules after the INTERACTIVE_PARSER token is seen
2280         to drive the evaluation with a custom wrapper. 
2281
2282         * driver.cs: Add support for --shell, and refactor some code to be
2283         reused from repl.cs
2284         
2285         * namespace.cs: Add support for serializing the contents of the
2286         namespaces and reloading them.  
2287
2288         * getline.cs: A managed implementation of ReadLine under
2289         X11/Apache2 license terms.  Easy to embed in other applications as
2290         well.
2291
2292         * namespace.cs: Add some functions to save and restore the
2293         namespace state.
2294
2295         * rootcontext.cs: New public field.
2296
2297         * cs-tokenizer.cs: Add support for one of the possible characters
2298         we introduce into the token stream.  
2299
2300         This patch does not affect the regular tokenization process, the
2301         only performance hit would happen if there is an invalid character
2302         on the input string.
2303
2304         * support.cs: Move isatty helper routine here.
2305
2306         * codegen.cs: Small cleanup, and add a mechanism to initialize the
2307         code generator for in-memory assemblies.
2308
2309 2008-08-26  Marek Safar  <marek.safar@gmail.com>
2310
2311         * generic.cs, ecore.cs, delegate.cs, cs-parser.jay, expression.cs: A type
2312         parameter cannot be always used as a type.
2313
2314 2008-08-21  Marek Safar  <marek.safar@gmail.com>
2315
2316         * convert.cs, expression.cs: Use single ExplicitReferenceConversion routine.
2317
2318 2008-08-21  Marek Safar  <marek.safar@gmail.com>
2319
2320         * convert.cs: Implement explicit array to IList<T> conversion.
2321
2322 2008-08-20  Marek Safar  <marek.safar@gmail.com>
2323
2324         A fix for bug #362740
2325         * cs-tokenizer.cs: Handle UTF-16 surrogates.
2326
2327 2008-08-20  Marek Safar  <marek.safar@gmail.com>
2328         
2329         * generic.cs, support.cs, typemanager.cs, lambda.cs, parameter.cs,
2330         pending.cs, ecore.cs, linq.cs, class.cs, decl.cs, delegate.cs,
2331         flowanalysis.cs, iterators.cs, cs-parser.jay, convert.cs, anonymous.cs,
2332         expression.cs, attribute.cs, statement.cs, doc.cs: Refactored parameters
2333         handling to use just one type of infrastructure and deal with generics
2334         more effectivelly.
2335
2336 2008-07-23  Martin Baulig  <martin@ximian.com>
2337
2338         *** Merged this from trunk revision 108527 ***
2339
2340         * statement.cs
2341         (ExplicitBlock.EmitSymbolInfo): Moved to `ToplevelBlock'.
2342         (ToplevelBlock.EmitSymbolInfo): Tell the symbol writer about the
2343         scope variable.
2344
2345 2008-08-15  Marek Safar  <marek.safar@gmail.com>
2346         
2347         * ecore.cs, linq.cs, const.cs, expression.cs, statement.cs: More robust
2348         error checks.
2349
2350 2008-08-15  Marek Safar  <marek.safar@gmail.com>
2351         
2352         * delegate.cs: Fixed compiler crash when creating delegate using partial
2353         method.
2354         
2355         * typemanager.cs: MulticastDelegate is not a delegate.
2356
2357 2008-08-14  Marek Safar  <marek.safar@gmail.com>
2358         
2359         * expression.cs, ecore.cs, anonymous.cs, class.cs: Fixed missing error
2360         checks.
2361
2362 2008-08-14  Raja R Harinath  <harinath@hurrynot.org>
2363
2364         * cs-parser.jay (type): Allow 'var' in mcs too.
2365         (local_variable_type): Likewise.
2366
2367 2008-08-14  Marek Safar  <marek.safar@gmail.com>
2368         
2369         * driver.cs: Removed broken -noconfig variants.
2370
2371 2008-08-14  Marek Safar  <marek.safar@gmail.com>
2372         
2373         A fix for bug #417078
2374         * expression.cs: Emit correctly left side pointer operators.
2375
2376 2008-08-13  Marek Safar  <marek.safar@gmail.com>
2377
2378         * generic.cs, lambda.cs: Inflate method generic arguments only.
2379
2380 2008-08-12  Marek Safar  <marek.safar@gmail.com>
2381
2382         * class.cs: Fixed struct layout check regression.
2383
2384 2008-08-12  Marek Safar  <marek.safar@gmail.com>
2385
2386         * cs-parser.jay, enum.cs: Simplified enum parsing.
2387         
2388         * decl.cs: Check all type parameters conflicts.
2389         
2390         * expression.cs, statement.cs, attribute.cs: More expression checks.
2391
2392 2008-08-11  Marek Safar  <marek.safar@gmail.com>
2393
2394         * generic.cs: Add type inference types restriction.
2395         
2396         * parameter.cs, class.cs, delegate.cs, iterators.cs, cs-parser.jay,
2397         anonymous.cs, expression.cs: Allocate less accessor parameters.
2398
2399 2008-08-08  Marek Safar  <marek.safar@gmail.com>
2400
2401         * typemanager.cs, ecore.cs: Ambiguous operators can come from different
2402         classes.
2403
2404 2008-08-08  Marek Safar  <marek.safar@gmail.com>
2405
2406         * convert.cs, delegate.cs: Fixed delegate compatibility conversion. 
2407
2408 2008-08-07  Marek Safar  <marek.safar@gmail.com>
2409
2410         * class.cs, decl.cs, iterator.cs, ecore.cs: Refactor base type resolving.
2411         Also fixes #362146 and #381592.
2412
2413 2008-08-07  Marek Safar  <marek.safar@gmail.com>
2414
2415         * ecore.cs: Reduced constant cannot be used as an attribute value.
2416         
2417         * cs-parser.jay: Base expression has to be a type.
2418         
2419         * expression.cs (Conditional): Uses ReducedExpression.
2420
2421 2008-08-06  Marek Safar  <marek.safar@gmail.com>
2422
2423         A fix for bug #376826
2424         * parameter.cs, ecore.cs, anonymous.cs, expression.cs, statement.cs: An
2425         address of hoisted local variable or parameter cannot be taken.
2426
2427 2008-08-05  Marek Safar  <marek.safar@gmail.com>
2428
2429         * ecore.cs, constant.cs, expression.cs, statement.cs: Resolve correctly 
2430         anonymous method inside checked/unchecked expression.
2431
2432 2008-08-05  Marek Safar  <marek.safar@gmail.com>
2433
2434         * typemanager.cs (IsEqual): Guard against null.
2435         
2436         * ecore.cs, class.cs, convert.cs, const.cs, constant.cs, expression.cs,
2437         attribute.cs, enum.cs, statement.cs: Pass EmitContext to constant conversion
2438         routine. Fixed few misleading conversion errors.
2439
2440 2008-08-04  Marek Safar  <marek.safar@gmail.com>
2441
2442         * class.cs: Consider generics when checking cycles in struct layout.
2443
2444 2008-08-04  Raja R Harinath  <harinath@hurrynot.org>
2445
2446         * cs-tokenizer.cs (get_cmd_arg): Simplify.  Don't be too pedantic.
2447
2448 2008-08-04  Marek Safar  <marek.safar@gmail.com>
2449
2450         A fix for bug #414165
2451         * anonymous.cs: Use same anonymous implementation method for all anonymous
2452         method emits.
2453
2454 2008-08-04  Marek Safar  <marek.safar@gmail.com>
2455
2456         * generic.cs, anonymous.cs, statement.cs: Emit inherited anonymous method
2457         constraints.
2458
2459 2008-08-04  Marek Safar  <marek.safar@gmail.com>
2460
2461         * cs-parser.jay: Typeof argument has to be a type expression.
2462         
2463         * namespace.cs: Check alias and namespace definitions collisions.
2464         
2465         * class.cs, pending.cs: Moved explicit interface accessor implementation
2466         check.
2467         
2468         * delegate.cs, expression.cs: Verify special name invocations.
2469         
2470 2008-08-01  Marek Safar  <marek.safar@gmail.com>
2471
2472         * cs-parser.jay: Don't choke on empty generic type arguments.
2473         
2474         * cs-tokenizer.cs: Handle escaped preprocessor directives.
2475         
2476         * expression.cs, ecore.cs: Minor expressions bugs.
2477
2478 2008-08-01  Marek Safar  <marek.safar@gmail.com>
2479
2480         * cs-parser.jay: Removed duplicate interface declaration (fixes 2 conflicts)
2481         and added more error handling.
2482         
2483         * class.cs, iterators.cs, anonymous.cs: Removed useless interface parameter.
2484         
2485         *  modifiers.cs, enum.cs: Fixed.
2486
2487 2008-07-31  Jb Evain  <jbevain@novell.com>
2488
2489         * driver.cs: remove -pkg ability of smcs.
2490
2491 2008-07-30  Marek Safar  <marek.safar@gmail.com>
2492
2493         * statement.cs (Switch): Correctly set empty default target for single
2494         blocks.
2495
2496 2008-07-30  Marek Safar  <marek.safar@gmail.com>
2497
2498         * typemanager.cs, assign.cs, driver.cs, expression.cs, statement.cs: Rewrote
2499         string switch statement implementation to use string dictionary which
2500         significantly (2-8x) improves performance of generated code.
2501
2502 2008-07-29  Marek Safar  <marek.safar@gmail.com>
2503
2504         A fix for bug #412880 by Atsushi Enomoto <atsushi@ximian.com>
2505         * modifiers.cs (GetDescription): Fixed FamANDAssem case.
2506         
2507 2008-07-29  Marek Safar  <marek.safar@gmail.com>
2508
2509         A fix for bug #412595
2510         * typemanager.cs, convert.cs, expression.cs: Some types are never
2511         convertible to each other.
2512
2513 2008-07-29  Marek Safar  <marek.safar@gmail.com>
2514
2515         * nullable.cs (CreateNullConstant): An error messages update.
2516
2517 2008-07-29  Marek Safar  <marek.safar@gmail.com>
2518
2519         A fix for bug #412595
2520         * cfold.cs: Don't cast undefined bool constant.
2521
2522 2008-07-29  Martin Baulig  <martin@ximian.com>
2523
2524         * symbolwriter.cs
2525         (SymbolWriter.Reset): New public static method.
2526
2527         * driver.cs
2528         (CompilerCallableEntryPoint.Reset): Call SymbolWriter.Reset().
2529
2530 2008-07-28  Marek Safar  <marek.safar@gmail.com>
2531
2532         * cs-tokenizer.cs (IsLambdaOpenParens): Optimized using more stop tokens.
2533         
2534         * expression.cs (ElementAccess): Exact size allocation.
2535
2536 2008-07-26  Marek Safar  <marek.safar@gmail.com>
2537
2538         * driver.cs: Replaced outdated UnixParseOption with CSCParseOption.
2539
2540 2008-07-25  Marek Safar  <marek.safar@gmail.com>
2541
2542         * flowanalysis.cs (StructInfo): Fixed detection of dynamic types.
2543         
2544         * class.cs: Removed $PRIVATE$ field hack which caused problems during
2545         flow analysis.
2546
2547 2008-07-25  Marek Safar  <marek.safar@gmail.com>
2548
2549         A fix for bug #412217
2550         * assign.cs: Mutate also assignment type.
2551
2552 2008-07-25  Marek Safar  <marek.safar@gmail.com>
2553
2554         A fix for bug #323644
2555         * typemanager.cs (IsValidProperty): Verify DefaultMemberName when checking
2556         indexers.
2557
2558 2008-07-25  Marek Safar  <marek.safar@gmail.com>
2559
2560         A fix for bug #412134
2561         * expression.cs (ResolveOperatorEnum): Do implicit conversion of
2562         non-enumerable operands when overloading equality or bitwise operators.
2563
2564 2008-07-25  Marek Safar  <marek.safar@gmail.com>
2565
2566         * anonymous.cs: Cache closed generic anonymous method delegates.
2567
2568 2008-07-24  Marek Safar  <marek.safar@gmail.com>
2569
2570         * lambda.cs, linq.cs, class.cs, iterators.cs, cs-parser.jay, assign.cs, 
2571         anonymous.cs, statement.cs: Always emit anonymous method as static method
2572         when is instance free. Use nesting for nested anynomous methods blocks.
2573         
2574 2008-07-23  Marek Safar  <marek.safar@gmail.com>
2575
2576         * anonymous.cs (MutateGenericMethod): Added extra code path for imported
2577         types.
2578
2579 2008-07-23  Marek Safar  <marek.safar@gmail.com>
2580
2581         * expression.cs: Removed MakeSimpleCall.
2582
2583 2008-07-23  Marek Safar  <marek.safar@gmail.com>
2584
2585         A fix for bug #323012
2586         * class.cs, pending.cs: Emit proxy for indexers when they differ in name.
2587         Base method implementing interface has to be public.
2588
2589 2008-07-23  Marek Safar  <marek.safar@gmail.com>
2590
2591         * cs-parser.jay: Don't break on missing argument.
2592
2593 2008-07-22  Marek Safar  <marek.safar@gmail.com>
2594
2595         A fix for bug #320993
2596         * report.cs, parameter.cs, class.cs, decl.cs, delegate.cs, attribute.cs,
2597           enum.cs, codegen.cs: Report CLS compliance errors as warnings.
2598
2599 2008-07-22  Marek Safar  <marek.safar@gmail.com>
2600
2601         A fix for bug #320748
2602         * convert.cs: Implicit user operators cannot convert to interfaces
2603
2604 2008-07-22  Marek Safar  <marek.safar@gmail.com>
2605
2606         A fix for bug #312686
2607         * driver.cs: Ignore empty assembly references.
2608
2609 2008-07-22  Marek Safar  <marek.safar@gmail.com>
2610
2611         A fix for bug #387040
2612         * ecore.cs: Skip constrains check for an explicit implementation.
2613
2614 2008-07-21  Marek Safar  <marek.safar@gmail.com>
2615
2616         A fix for bug #409045
2617         * cs-tokenizer.cs, rootcontext.cs, class.cs, location.cs, delegate.cs,
2618           cs-parser.jay, driver.cs, expression.cs, attribute.cs: Conditional
2619           identifiers are file specific unless passed as input arguments.
2620
2621 2008-07-21  Marek Safar  <marek.safar@gmail.com>
2622
2623          * typemanager.cs, parameter.cs, class.cs, attribute.cs: Use an attribute
2624          to emit UnmanagedMarshal data under 2.0 profile.
2625
2626 2008-07-21  Marek Safar  <marek.safar@gmail.com>
2627
2628         A fix for bug #410369
2629         * parameter.cs: Clone correctly ParamsParameter.
2630
2631 2008-07-21  Marek Safar  <marek.safar@gmail.com>
2632
2633         * expression.cs (Argument): Always report type for type based expressions
2634         errors.
2635
2636 2008-07-18  Marek Safar  <marek.safar@gmail.com>
2637
2638         A fix for bug #410666
2639         * anonymous.cs: Correctly initialize generic storey reference.
2640
2641 2008-07-18  Marek Safar  <marek.safar@gmail.com>
2642
2643         * convert.cs: Don't box same type arguments.
2644
2645 2008-07-18  Marek Safar  <marek.safar@gmail.com>
2646
2647         * ecore.cs, linq.cs, delegate.cs, constant.cs, nullable.cs, expression.cs:
2648         Finished missing generic type mutators.
2649
2650 2008-07-18  Marek Safar  <marek.safar@gmail.com>
2651
2652         * iterators.cs, statement.cs: Finished statements CloneTo.
2653
2654 2008-07-18  Marek Safar  <marek.safar@gmail.com>
2655
2656         * anonymous.cs: ExpressionTreeProxy is of Value type expression.
2657         
2658         * expression.cs: Emit optimized default value expressions in expression tree
2659         array initializer.
2660
2661 2008-07-18  Marek Safar  <marek.safar@gmail.com>
2662
2663         * ecore.cs, cs-parser.jay, statement.cs: Error reporting fixes.
2664
2665 2008-07-17  Marek Safar  <marek.safar@gmail.com>
2666
2667         A fix for bug #367536
2668         * cs-parser.jay: Check static constructor of generic types for an access
2669         modifier.
2670
2671 2008-07-17  Marek Safar  <marek.safar@gmail.com>
2672
2673         A fix for bug #353800
2674         * lambda.cs: Emit ret for contextual statements.
2675         
2676         * codegen.cs: Keep both resolved and unreachable flags, otherwise we end
2677         up emitting redundant ret for all anonymous methods with return.
2678
2679 2008-07-17  Marek Safar  <marek.safar@gmail.com>
2680
2681         A fix for bug #365188
2682         * ecore.cs, anonymous.cs, expression.cs, codegen.cs, statement.cs: Don't
2683         create anonymous method storey in unreachable block.
2684
2685 2008-07-17  Marek Safar  <marek.safar@gmail.com>
2686
2687         * generic.cs, typemanager.cs, cs-tokenizer.cs, parameter.cs, namespace.cs,
2688         class.cs, delegate.cs, flowanalysis.cs, iterators.cs, anonymous.cs,
2689         driver.cs, nullable.cs, expression.cs, attribute.cs, codegen.cs,
2690         statement.cs: Fixed relevant defects found by Gendarme.
2691
2692 2008-07-17  Marek Safar  <marek.safar@gmail.com>
2693
2694         A fix for bug #325291
2695         * modifiers.cs, class.cs, cs-parser.jay, anonymous.cs, codegen.cs, 
2696         statement.cs: Replaced IAnonymousHost with top level block flag.
2697
2698 2008-07-17  Marek Safar  <marek.safar@gmail.com>
2699
2700         * cs-parser.jay: Clean up unused open_parens.
2701
2702 2008-07-17  Marek Safar  <marek.safar@gmail.com>
2703
2704         * ecore.cs: Custom error message for a range variable assignment.
2705
2706 2008-07-16  Marek Safar  <marek.safar@gmail.com>
2707
2708         * constant.cs, typemanager.cs: Emit empty string ("") as string.Empty field
2709         load.
2710
2711 2008-07-16  Marek Safar  <marek.safar@gmail.com>
2712
2713         * literal.cs: Null literal is of object type.
2714
2715 2008-07-16  Marek Safar  <marek.safar@gmail.com>
2716
2717         * nullable.cs (LiftedBinaryOperator): Always lift unwrapped nullable
2718         expression of nullable equality comparison.
2719
2720 2008-07-15  Marek Safar  <marek.safar@gmail.com>
2721
2722         * expression.cs(PointerArithmetic): Removed redundant assignment.
2723
2724 2008-07-15  Marek Safar  <marek.safar@gmail.com>
2725
2726         * decl.cs (GetSignatureForError): Report full namespace name for containers.
2727
2728 2008-07-14  Marek Safar  <marek.safar@gmail.com>
2729
2730         A fix for bug #408361
2731         * anonymous.cs (MutateGenericMethod): Store generic type arguments before
2732         they are replaced by GetMethod.
2733
2734 2008-07-14  Marek Safar  <marek.safar@gmail.com>
2735
2736         A fix for bug #408721 by jeremie.laval@gmail.com
2737         * expression.cs (Indirection): Implemented CloneTo.
2738
2739 2008-07-14  Marek Safar  <marek.safar@gmail.com>
2740
2741         * statement.cs (AssignableSlots): Temporary disabled variable initialization
2742         assert check.
2743
2744 2008-07-14  Marek Safar  <marek.safar@gmail.com>
2745
2746         * report.cs (EnableReporting): Don't reinitialize 0-based values.
2747
2748 2008-07-11  Marek Safar  <marek.safar@gmail.com>
2749
2750         * linq.cs: Reset tranparent parameter counter in probing mode.
2751
2752 2008-07-11  Marek Safar  <marek.safar@gmail.com>
2753
2754         * anonymous.cs: Mutate anonymous method type.
2755
2756 2008-07-11  Marek Safar  <marek.safar@gmail.com>
2757
2758         * ecore.cs, anonymous.cs: Mutate field expressions.
2759
2760 2008-07-10  Marek Safar  <marek.safar@gmail.com>
2761
2762         A fix for bug #369670
2763         * linq.cs, statement.cs: Use explicit block for query expressions variables.
2764
2765 2008-07-10  Marek Safar  <marek.safar@gmail.com>
2766
2767         * report.cs, ecore.cs: Flush recorder only when silent mode is off.
2768
2769 2008-07-10  Raja R Harinath  <harinath@hurrynot.org>
2770
2771         Fix bug #314902
2772         * cs-tokenizer.cs (is_punct): If a generic lookahead is looking
2773         only one '>', and finds a '>>', abort the generic lookahead.
2774
2775 2008-07-10  Marek Safar  <marek.safar@gmail.com>
2776
2777         A fix for bug #319902
2778         * cs-tokenizer.cs: Always look-ahed for `>='  when tokenizing `>'.
2779
2780 2008-07-10  Marek Safar  <marek.safar@gmail.com>
2781
2782         A fix for bug #406371
2783         * statement.cs: Moved EmitSymbolInfo to Block.
2784
2785 2008-07-09  Marek Safar  <marek.safar@gmail.com>
2786
2787         * ecore.cs: Report better error for extension method overload failures.
2788
2789 2008-07-09  Marek Safar  <marek.safar@gmail.com>
2790
2791         * expression.cs (Is): No need to box reference values.
2792
2793 2008-07-09  Marek Safar  <marek.safar@gmail.com>
2794
2795         * class.cs: Use event resolve context when initializing CreateEmitContext.
2796
2797 2008-07-09  Marek Safar  <marek.safar@gmail.com>
2798
2799         A fix for bug #394436
2800         * anonymous.cs, class.cs, expression.cs, lambda.cs: Emit correctly extension
2801         method used inside expression trees. Added more LINQ to expression tree
2802         conversions.
2803
2804 2008-07-08  Marek Safar  <marek.safar@gmail.com>
2805
2806         A fix for bug #378189, #370577
2807         * lambda.cs, ecore.cs: Implemented 3.0 enhancement to better conversion
2808         from expression.
2809
2810 2008-07-08  Marek Safar  <marek.safar@gmail.com>
2811
2812         * anonymous.cs, class.cs, decl.cs: Emit CompilerGenerated attribute
2813         hierarchically.
2814
2815 2008-07-08  Marek Safar  <marek.safar@gmail.com>
2816
2817         A fix for bug #406702
2818         * anonymous.cs: Always park anonymous method in the nearest parent storey.
2819
2820 2008-07-07  Marek Safar  <marek.safar@gmail.com>
2821
2822         A fix for bug #406648
2823         * cs-parser.jay: Report nullable use in mcs for some cases.
2824
2825 2008-07-07  Marek Safar  <marek.safar@gmail.com>
2826
2827         * ecore.cs: Improved argument mismatch error messages.
2828
2829 2008-07-07  Marek Safar  <marek.safar@gmail.com>
2830
2831         * anonymous.cs: Don't cache generic delegates when reference MVAR argument.
2832
2833 2008-07-07  Marek Safar  <marek.safar@gmail.com>
2834
2835         * expression.cs (TypeOf): Mutate type argument.
2836
2837 2008-07-04  Marek Safar  <marek.safar@gmail.com>
2838
2839         * class.cs: Report missing partial modifier for correct type.
2840
2841 2008-07-04  Marek Safar  <marek.safar@gmail.com>
2842
2843         * ecore.cs, expression.cs (VariableReference): Variable property is 
2844         protected.
2845
2846 2008-07-04  Marek Safar  <marek.safar@gmail.com>
2847
2848         * ecore.cs, convert.cs: Made OpcodeCast more memory efficient.
2849         
2850 2008-07-04  Marek Safar  <marek.safar@gmail.com>
2851
2852         * anonymous.cs, class.cs, lambda.cs, iterator.cs: Cache static anonymous
2853         method delegates.
2854
2855 2008-07-04  Marek Safar  <marek.safar@gmail.com>
2856
2857         * anonymous.cs, class.cs, expression.cs, iterator.cs, statement.cs: Reduce
2858         anonymous method storey to an instance method when only "this" is hoisted.
2859
2860 2008-07-03  Marek Safar  <marek.safar@gmail.com>
2861
2862         A fix for bug #321615
2863         * expression.cs: Pointer comparisons use unsigned operator.
2864
2865 2008-07-03  Marek Safar  <marek.safar@gmail.com>
2866
2867         * expression.cs: Fixed native pointer conversions. Also fixes #321615.
2868
2869 2008-07-02  Marek Safar  <marek.safar@gmail.com>
2870
2871         A fix for bug #404905
2872         * class.cs: Always initialize local unsafe variables.
2873
2874 2008-06-30  Marek Safar  <marek.safar@gmail.com>
2875
2876         A fix for bug #396987
2877         * expression.cs (NewInitialize): Clear local temporary variable for next run
2878
2879 2008-06-27  Marek Safar  <marek.safar@gmail.com>
2880
2881         A fix for bug #401020
2882         * ecore.cs: Both types and modifiers have to match for ref and out arguments
2883
2884 2008-06-27  Marek Safar  <marek.safar@gmail.com>
2885
2886         A fix for bug #398319
2887         * cs-parser.jay: Implemented undocumented base access expression inside
2888         anonymous types.
2889
2890 2008-06-26  Marek Safar  <marek.safar@gmail.com>
2891
2892         A fix for bug #404227
2893         * cs-parser.jay: Parse namespace declaration using qualified identifier.
2894
2895 2008-06-26  Marek Safar  <marek.safar@gmail.com>
2896
2897         A fix for bug #404227
2898         * convert.cs: Fixed explicit array to interface cast.
2899
2900 2008-06-26  Marek Safar  <marek.safar@gmail.com>
2901
2902         A fix for bug #403894
2903         * delegate.cs: Mutate DelegateInvocation type.
2904
2905 2008-06-26  Marek Safar  <marek.safar@gmail.com>
2906
2907         A fix for bug #379348
2908         * delegate.cs: Box a load of generic parameters.
2909
2910 2008-06-26  Marek Safar  <marek.safar@gmail.com>
2911
2912         * expression.cs: Add an array creation arguments mutate.
2913
2914 2008-06-26  Marek Safar  <marek.safar@gmail.com>
2915
2916         A fix for bug #386068
2917         * anonymous.cs, expression.cs: Emit correctly hoisted expression tree
2918         parameter.
2919
2920 2008-06-25  Marek Safar  <marek.safar@gmail.com>
2921
2922         * ecore.cs, expression.cs: Fixed broken TypeCast clone, implemented few more
2923         CloneTo.
2924
2925 2008-06-25  Marek Safar  <marek.safar@gmail.com>
2926
2927         A fix for bug #403518
2928         * delegate.cs: Type correctly anonymous method new invocation.
2929
2930 2008-06-24  Marek Safar  <marek.safar@gmail.com>
2931
2932         A fix for bug #394826
2933         * anonymous.cs: Fully qualify members when resolving anonymous type internal
2934         calls.
2935
2936 2008-06-24  Marek Safar  <marek.safar@gmail.com>
2937
2938         A fix for bug #394826
2939         * anonymous.cs, iterators.cs: Construct generic storey only when is really
2940         needed.
2941
2942 2008-06-24  Marek Safar  <marek.safar@gmail.com>
2943
2944         * class.cs: Clone indexer parameters for localized capturing.
2945
2946 2008-06-24  Marek Safar  <marek.safar@gmail.com>
2947
2948         A fix for bug #402379
2949         * expression.cs: Don't crash when an object initializer resolve fails.
2950
2951 2008-06-24  Marek Safar  <marek.safar@gmail.com>
2952
2953         A fix for bug #402888
2954         * expression.cs: Mutate conditional expression.
2955
2956 2008-06-24  Marek Safar  <marek.safar@gmail.com>
2957
2958         A fix for bug #401012
2959         * class.cs: Keep StructLayout in shared container.
2960
2961 2008-06-24  Marek Safar  <marek.safar@gmail.com>
2962
2963         A fix for bug #400438
2964         * decl.cs, class.cs: Only properties can be automatically implemented.
2965
2966 2008-06-24  Marek Safar  <marek.safar@gmail.com>
2967
2968         * statement.cs (ChangeToIterator): Copy also labels.
2969
2970 2008-06-23  Marek Safar  <marek.safar@gmail.com>
2971
2972         * ecore.cs: Pass type argument details to parent extension method.
2973
2974 2008-06-23  Marek Safar  <marek.safar@gmail.com>
2975
2976         A fix for bug #375966
2977         * delegate.cs: Fixed IsTypeCovariant generic type conversions.
2978
2979 2008-06-23  Raja R Harinath  <harinath@hurrynot.org>
2980
2981         * Makefile (bootstrap-libs): Pass NO_DIR_CHECK to sub-make.
2982
2983 2008-06-22  Marek Safar  <marek.safar@gmail.com>
2984
2985         A fix for bug #394347
2986         * anonymous.cs: Cache compatible delegates as compatibility check produces
2987         a new method every time.
2988
2989 2008-06-20  Marek Safar  <marek.safar@gmail.com>
2990
2991         * anonymous.cs: Propagate storey reference for single references.
2992
2993 2008-06-20  Marek Safar  <marek.safar@gmail.com>
2994
2995         A fix for bug #387615
2996         * assign.cs, expression.cs: Correctly clone compound assignment.
2997
2998 2008-06-19  Marek Safar  <marek.safar@gmail.com>
2999
3000         A fix for bug #359611, #359604
3001         * anonymous.cs: Mutate all types of hoisted parameters.
3002
3003 2008-06-19  Marek Safar  <marek.safar@gmail.com>
3004
3005         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, linq.cs, class.cs
3006         delegate.cs, iterators.cs, cs-parser.jay, assign.cs, anonymous.cs, driver.cs
3007         expression.cs, codegen.cs, statement.cs
3008         
3009         Fixes bugs: #318652, #323223, #234779, #325069, #325476, #332532, #334465,
3010         #345907, #349190, #353276, #355256, #359617, #378542, #384584, #396530
3011         
3012         ** Anonymous methods, lambda expressions rewrite **
3013         
3014         Anonymous expressions are now resolved when an explicit block is resolved 
3015         and they don't require any registration procedure anymore. Further,
3016         anonymous methods are defined when explicit block is emitted which allows
3017         better control of whole process and opens possibilities for more
3018         optimizations as well as alternative to reverse whole process.
3019         
3020         A concept of `MutateHoistedGenericType' was introduced to keep the resolve
3021         process consistent and to correctly emit hoisted generic methods when they
3022         have at least 1 hoisted variable.
3023         
3024 2008-06-17  Martin Baulig  <martin@ximian.com>
3025
3026         * class.cs: Also emit the `[DebuggerHidden]' attribute on the main
3027         iterator method.
3028         (AbstractPropertyEventMethod.IsDebuggerHidden): New protected
3029         virtual property; check it in Emit().
3030         (PropertyMethod.IsDebuggerHidden): Override, check whether we're
3031         an iterator.
3032         (MethodOrOperator.ResolveMethods): Set `DEBUGGER_HIDDEN' if we're
3033         an iterator.
3034         (Indexer.Define): Likewise.
3035
3036 2008-06-17  Marek Safar  <marek.safar@gmail.com>
3037
3038         * convert.cs: Don't use IsInterface on type arguments.
3039         
3040         * delegate.cs: DelegateInvocation uses MethodInfo.
3041         
3042         * parameter.cs: Removed IsTypeParameter.
3043         
3044         * generic-mcs.cs: More missing stuff.
3045
3046 2008-06-16  Martin Baulig  <martin@ximian.com>
3047
3048         * modifiers.cs
3049         (Modifiers.DEBUGGER_HIDDEN): New public const.
3050
3051         * typemanager.cs
3052         (TypeManager.GetDebuggerHiddenAttribute): New public static method.
3053
3054         * class.cs
3055         (MethodOrOperator.Emit): Check `Modifiers.DEBUGGER_HIDDEN'.
3056         (AbstractPropertyEventMethod): Likewise.
3057         (Constructor.Emit): Likewise.
3058         (SourceMethod.SetCompilerGenerated): Removed.
3059
3060         * iterator.cs: Set `Modifiers.DEBUGGER_HIDDEN' everywhere except
3061         on MoveNext().
3062
3063         * anonymous.cs
3064         (RootScopeInfo.DoDefineMembers): Set `Modifiers.DEBUGGER_HIDDEN'
3065         if we're an `IteratorHost'.
3066         (AnonymousMethodMethod..ctor): Don't set
3067         `Modifiers.COMPILER_GENERATED'; csc only sets this on the class,
3068         not on the method.
3069
3070 2008-06-16  Marek Safar  <marek.safar@gmail.com>
3071
3072         * statement.cs: Clean-up foreach statements.
3073
3074 2008-06-12  Marek Safar  <marek.safar@gmail.com>
3075
3076         * class.cs: Stop using public method which should not exist
3077         (MethodBuilder.SetGenericMethodSignature).
3078
3079 2008-06-11  Martin Baulig  <martin@ximian.com>
3080
3081         * location.cs
3082         (Location.LookupFile): Add `CompilationUnit' argument; when given
3083         a relative file name, make it relative to the directory the .cs
3084         file is located in instead of using the current directory.
3085
3086 2008-06-11  Martin Baulig  <martin@ximian.com>
3087
3088         * class.cs
3089         (IMethodData.EmitExtraSymbolInfo): Added `SourceMethod' argument.
3090         (MethodOrOperator.EmitExtraSymbolInfo): Likewise.
3091         (SourceMethod.SetRealMethodName): Moved here from the symbol writer.
3092         (SourceMethod.SetCompilerGenerated): Likewise.
3093
3094 2008-06-11  Marek Safar  <marek.safar@gmail.com>
3095
3096         * codegen.cs, driver: Only write symbol file when it's asked for.
3097
3098 2008-06-11  Marek Safar  <marek.safar@gmail.com>
3099
3100         * codegen.cs: Don't use assembly writer error handling for symbol writer.
3101
3102 2008-06-10  Martin Baulig  <martin@ximian.com>
3103
3104         * symbolwriter.cs: Reflect latest MarkSequencePoint() API changes.
3105
3106 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3107
3108         A fix for bug #316290
3109         * expression.cs: Include decimal operators in predefined table.
3110         
3111         * parameters.cs: More readonlyness.
3112
3113 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3114
3115         A fix for bug #397213
3116         * cs-parser.jay: One more missing current_local_parameters reset.
3117
3118 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3119
3120         A fix for bug #396633
3121         * class.cs: Host backing field in partial container.
3122
3123 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3124
3125         A fix for bug #397068
3126         * expression.cs: Check both operand types when predefined operator is used.
3127
3128 2008-06-05  Martin Baulig  <martin@ximian.com>
3129
3130         Merged the `debugger-kahalo' branch.
3131
3132         * class.cs
3133         (MethodData.Emit): Call SymbolWriter.SetCompilerGenerated() if
3134         we're an iterator method.
3135         (SourceMethod): Reflect latest symbol writer changes;
3136         SymbolWriter.OpenMethod() now takes a `ICompileUnit' argument and
3137         now `start_row' and `end_row'.
3138         (Constructor.Emit): Fix the logic whether to emit symbol information.
3139
3140         * iterator.cs: Call SymbolWriter.SetCompilerGenerated() on all the
3141         generated methods.
3142
3143         * location.cs
3144         (CompilationUnit): New public class; derives from `SourceFile'.
3145         (SourceFileEntry.DefineSymbolInfo): New public method.
3146         (SourceFileEntry.SetChecksum): New public method.
3147         (Location): Encode hidden line numbers by using `column == 255';
3148         the .ctor now accepts `column == -1' to mark a hidden line number.
3149         (Location.Hidden): New public property.
3150         (Location.CheckPoint): Add `CompilationUnit'.
3151         (Location.SourceFiles): Change return type to `CompilationUnit[]'.
3152         (Location.Push): Add `CompilationUnit compile_unit' argument.
3153         (Location.CompilationUnit): New public property.
3154
3155         * statement.cs
3156         (ToplevelBlock.Emit): Add `ec.Mark (EndLocation)'.
3157
3158         * cs-parser.jay: `SourceFile' -> `CompilationUnit'.
3159
3160         * driver.cs: `SourceFile' -> `CompilationUnit'.
3161
3162         * cs-tokenizer.cs: `SourceFile' -> `CompilationUnit'.
3163
3164         * namespace.cs: `SourceFile' -> `CompilationUnit'.
3165
3166         * cs-tokenizer.cs: Add support for `#pragma checksum' and
3167         `#line hidden'.
3168
3169         * symbolwriter.cs
3170         (SymbolWriter.MarkSequencePoint): Take a `Location' and use the
3171         new symbol writer API to also pass the file.
3172
3173 2008-06-05  Marek Safar  <marek.safar@gmail.com>
3174
3175         * statement.cs: Emit catch variable assignment using variable expression.
3176         
3177 2008-06-05  Marek Safar  <marek.safar@gmail.com>
3178
3179         * ecore.cs, expression.cs, statement.cs: Make TemporaryVariable compatible
3180         with other variable types.
3181
3182 2008-06-04  Marek Safar  <marek.safar@gmail.com>
3183
3184         * ecore.cs, expression.cs, statement.cs, typemanager.cs: Removed custom
3185         GetLength method emit, it breaks resolve rules.
3186         
3187 2008-06-02  Atsushi Enomoto  <atsushi@ximian.com>
3188             Marek Safar  <marek.safar@gmail.com>
3189                         
3190         A fix for bug #395542
3191         * cs-parser.jay: The trailing comma is allowed in anonymous type member
3192         declaration.
3193         
3194 2008-06-02  Marek Safar  <marek.safar@gmail.com>
3195
3196         A fix for bug #395287
3197         * class.cs, modifiers.cs: Automatic properties method base modifiers checks.
3198
3199 2008-05-31  Marek Safar  <marek.safar@gmail.com>
3200
3201         A fix for bug #395845
3202         * class.cs, nullable.cs: User unary operator is allowed to have nullable and
3203         non-nullable parameter type.
3204         
3205 2008-05-31  Marek Safar  <marek.safar@gmail.com>
3206
3207         * class.cs: Handle contructor initializer as a statement in top-level block.
3208
3209 2008-05-30  Marek Safar  <marek.safar@gmail.com>
3210
3211         * attribute.cs: Don't mix old and new corlib types when emitting corlib
3212         security attributes.
3213
3214 2008-05-24  Marek Safar  <marek.safar@gmail.com>
3215
3216         * ecore.cs, expression.cs: Small IVariable refactoring.
3217
3218 2008-05-22  Marek Safar  <marek.safar@gmail.com>
3219
3220         * assign.cs (LocalTemporary): Implemented CreateExpressionTree.
3221
3222 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3223
3224         * cs-parser.jay: Removed redundant catch type check.
3225
3226 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3227
3228         A fix for bug #390372
3229         * nullable.cs: Set correct return type.
3230
3231 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3232
3233         A fix for bug #391062
3234         * typemanager.cs: Fixed crash when comparing null types.
3235
3236 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3237
3238         A fix for bug #391871
3239         * cs-parser.jay: Better error handling for invalid catch type.
3240
3241 2008-05-20  Marek Safar  <marek.safar@gmail.com>
3242
3243         A fix for bug #392155
3244         * cs-tokenizer.cs: Fixed casting of byte and decimal expression.
3245
3246 2008-05-15  Marek Safar  <marek.safar@gmail.com>
3247
3248         A fix for bug #390666
3249         * ecore.cs (BetterExpressionConversion): Unwrap each Expression<T>
3250         expressions.
3251
3252 2008-05-15  Marek Safar  <marek.safar@gmail.com>
3253
3254         * class.cs, expression.cs, statement.cs: Removed a hack, setting block flag
3255         in getter.
3256
3257 2008-05-13  Marek Safar  <marek.safar@gmail.com>
3258
3259         A fix for bug #389625
3260         * delegate.cs, generic.cs: Some progress on method group return type
3261         inference.
3262
3263 2008-05-13  Marek Safar  <marek.safar@gmail.com>
3264
3265         A fix for bug #378419
3266         * namespace.cs: Inspect also parent namespaces not only namespace entries.
3267
3268 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3269
3270         * class.cs (Constructor): Added IsCompilerGenerated.
3271
3272 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3273
3274         * expression.cs: Enum binary operators can accept non-enum operand only when
3275         is implicitly convertible to underlying type.
3276
3277 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3278
3279         A fix for bug #389272
3280         * support.cs: Workaround System.InvalidOperationException for enums.
3281
3282 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3283
3284         A fix for bug #389073
3285         * convert.cs: More undocumented explicit IntPtr/UIntPtr conversions.
3286
3287 2008-05-10  Marek Safar  <marek.safar@gmail.com>
3288
3289         * driver.cs: Split Parse.
3290         
3291         * location.cs (LookupFile): Uses string.Empty.
3292
3293 2008-05-07  Marek Safar  <marek.safar@gmail.com>
3294
3295         * expression.cs, parameter.cs: Small ParameterReference clean up.
3296
3297 2008-05-07  Marek Safar  <marek.safar@gmail.com>
3298
3299         * anonymous.cs, codegen.cs, convert.cs, ecore.cs: Removed uber ugly TempEc
3300         hack. Fixes #387502.
3301
3302 2008-05-06  Martin Baulig  <martin@ximian.com>
3303
3304         * class.cs (Constructor.Emit): Fix the logic whether to emit
3305         symbol information.
3306
3307 2008-05-06  Raja R Harinath  <harinath@hurrynot.org>
3308
3309         Fix #385503
3310         * iterators.cs (Iterator.CurrentBlock.DoEmit): Don't emit
3311         InvalidOperationException when the iterator is before the start or
3312         after the end.
3313
3314 2008-05-06  Marek Safar  <marek.safar@gmail.com>
3315
3316         * nullable.cs (NullCoalescingOperator): Result is underlying type of left,
3317         when left is nullable type.
3318
3319 2008-05-06  Marek Safar  <marek.safar@gmail.com>
3320
3321         A fix for bug #386628
3322         * expression.cs (LocalVariableReference): Continue in resolving when
3323         variable is not assigned.
3324
3325 2008-05-05  Marek Safar  <marek.safar@gmail.com>
3326
3327         * nullable.cs, statement.cs (Unwrap): Store non-variable expression in all
3328         nullable operations.
3329
3330 2008-05-04  Marek Safar  <marek.safar@gmail.com>
3331
3332         * nullable.cs, statement.cs (Unwrap): Don't duplicate variable expressions,
3333         it saves many redundant temporary variables for nullable operations.
3334
3335 2008-05-03  Marek Safar  <marek.safar@gmail.com>
3336
3337         * assign.cs: EventAddOrRemove is a statement and cannot have a type.
3338         
3339         * cfold.cs, constant.cs, expression.cs: Share Error_OperatorCannotBeApplied
3340         method.
3341         
3342         * nullable.cs: Constant coalescing operator optimizations.
3343
3344 2008-05-03  Marek Safar  <marek.safar@gmail.com>
3345
3346         * constant.cs: Use unsigned conversion for values which are unsigned only.
3347
3348 2008-05-03  Marek Safar  <marek.safar@gmail.com>
3349
3350         * convert.cs, literal.cs, nullabel.cs, typemanager.cs: Implemeted null 
3351         coalescing operator as it should be.
3352
3353 2008-05-02  Marek Safar  <marek.safar@gmail.com>
3354
3355         A fix for bug #371016
3356         * expression.cs: All predefined delegate operators require implicit method
3357         group conversion.
3358         
3359 2008-05-02  Marek Safar  <marek.safar@gmail.com>
3360
3361         * constant.cs: Emit long constant as uint when fits the range.
3362         
3363         * convert.cs, expression.cs: Fixed few unsafe conversions.
3364
3365 2008-05-02  Marek Safar  <marek.safar@gmail.com>
3366
3367         * convert.cs, literal.cs: Don't wrap implicit reference conversion to object
3368
3369 2008-05-02  Raja R Harinath  <harinath@hurrynot.org>
3370
3371         Fix #385758
3372         * convert.cs (ImplicitNumericConversion): Don't modify the type of
3373         'expr'.
3374         * ecore.cs (EmptyCast.Create): Flatten nested EmptyCasts.
3375
3376 2008-05-01  Marek Safar  <marek.safar@gmail.com>
3377
3378         * constant.cs, literal.cs: IsLiteral property for error reporting.
3379         
3380         * ecore.cs, expression.cs: Implemented Property expression.
3381
3382 2008-05-01  Marek Safar  <marek.safar@gmail.com>
3383
3384         * class.cs, modifiers.cs, flowanalysis.cs: New BACKING_FIELD flag.
3385         
3386         * nullable.cs: Implemented nullable coalescing null operator.
3387
3388         * ecore.cs, expression.cs: Expression trees work.
3389
3390 2008-05-01  Marek Safar  <marek.safar@gmail.com>
3391
3392         * ecore.cs: CreateExpressionTree is finally abstract.
3393
3394         * expression.cs, linq.cs: Updated.
3395
3396 2008-05-01  Marek Safar  <marek.safar@gmail.com>
3397
3398         * expression.cs, ecore.cs: Block base access expression inside expression
3399         tree.
3400
3401 2008-05-01  Marek Safar  <marek.safar@gmail.com>
3402
3403         A fix for bug #385058
3404         * expression.cs: User-defined operator implementations always take
3405         precedence over predefined operator implementations.
3406
3407 2008-04-30  Marek Safar  <marek.safar@gmail.com>
3408
3409         * assign.cs, anonymous.cs, lambda.cs, nullable.cs, ecore.cs, linq.cs,
3410         class.cs, iterators.cs, expression.cs, attribute.cs: Filled a few more
3411         expression tree conversions.
3412         
3413 2008-04-30  Marek Safar  <marek.safar@gmail.com>
3414
3415         * typemanager.cs, ecore.cs, class.cs, expression.cs, doc.cs: Merged all
3416         operators method details to Operator class.
3417
3418 2008-04-30  Marek Safar  <marek.safar@gmail.com>
3419
3420         * anonymous.cs: Pass unsafe flags to anonymous container.
3421         
3422         * ecore.cs, expression.cs, statement.cs: Block unsafe pointer operations
3423         inside expression tree.
3424
3425 2008-04-29  Martin Baulig  <martin@ximian.com>
3426
3427         * cs-tokenizer.cs (Tokenizer.Position): Added `line'.
3428         (Tokenizer.PopPosition): Also restore the `line'.
3429
3430 2008-04-29  Marek Safar  <marek.safar@gmail.com>
3431
3432         * delegate.cs: Implemented Invoke expression.
3433
3434 2008-04-29  Marek Safar  <marek.safar@gmail.com>
3435
3436         * expression.cs: Fixed equality reference comparison regression.
3437
3438 2008-04-29  Marek Safar  <marek.safar@gmail.com>
3439
3440         * ecore.cs: Clean up EmptyCast hack.
3441         
3442         * expression.cs, nullable.cs: Implemented enum binary and unary operations
3443         using correct conversion rules. Also fixes #383993.
3444
3445 2008-04-28  Martin Baulig  <martin@ximian.com>
3446
3447         * class.cs (Constructor.Emit): Don't emit debugging information
3448         for generated default .ctor's.
3449
3450 2008-04-28  Marek Safar  <marek.safar@gmail.com>
3451
3452         * convert.cs: Empty-cast ushort to int conversion.
3453
3454 2008-04-28  Marek Safar  <marek.safar@gmail.com>
3455
3456         A fix for bug #384191
3457         * ecore.cs, expression.cs: Fixed expression cloning.
3458
3459 2008-04-28  Marek Safar  <marek.safar@gmail.com>
3460
3461         * ecore.cs, delegate.cs, assign.cs: Few tweaks for recent changes.
3462
3463 2008-04-28  Raja R Harinath  <harinath@hurrynot.org>
3464
3465         Fix #381559, test-638.cs, test-639.cs
3466         * assign.cs (CompoundAssign.Helper): New wrapper.
3467         (CompoundAssign.DoResolve): Use it to wrap the nested 'target'
3468         access.
3469         * ecore.cs (MethodGroupExpr.VerifyArgumentsCompat) <params arguments>:
3470         Pass unconverted expressions to the params array creation expression.
3471         (FieldExpr.EmitAssign): Don't special-case StringConcat.
3472         (PropertyExpr.EmitAssign): Likewise.
3473         * expression.cs (ArrayCreation.ResolveArrayElement): Keep track of the
3474         element if it is of kind CompoundAssign.Helper.
3475         (ArrayCreation.Emit): If we saw a CompoundAssign.Helper, emit it
3476         first before anything else.
3477         (ArrayAccess.EmitAssign): Don't special-case StringConcat.
3478         (ArrayAccess.LoadArrayAndArguments): Simplify.
3479
3480 2008-04-27  Marek Safar  <marek.safar@gmail.com>
3481
3482         * expression.cs: Fixed cloning of typeof(void).
3483
3484 2008-04-27  Raja R Harinath  <harinath@hurrynot.org>
3485
3486         * assign.cs (Assign.DoResolve): Remove support for EventExprs.
3487         (Assign.Emit): Likewise.  Move it to ...
3488         (CompoundAssign.DoResolve): ... here and ...
3489         (CompoundAssign.Emit): ... here.
3490         (EventAddOrRemove): New helper to handle += and -= on events, and
3491         avoid the use of BinaryDelegates.
3492         * ecore.cs (EventExpr.DoResolveLValue): Emit CS0070 unconditionally.
3493         (EventExpr.EmitAddOrRemove): Improve.
3494         * delegate.cs (DelegateInvocation.DoResolve): Simplify slightly.
3495
3496         * cs-parser.jay (type) <namespace_or_type_name variant>: Don't
3497         create VarExprs for 'foo.bar.var'.
3498         * ecore.cs (VarExpr.InferType): Rename from DoResolveLValue, which
3499         is a highly inappropriate name for its functionality.
3500
3501 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
3502
3503         Simplify handling of multiple assignments
3504         * assign.cs (Assign): Clear out all 'embedded assign' gunk.  Make
3505         inheritable-only.
3506         (SimpleAssign): New.  Class to be used for normal assignments.
3507         * anonymous.cs, class.cs, cs-parser.jay: Update to changes.
3508         * expression.cs, parameter.cs, statement.cs: Likewise.
3509
3510 2008-04-25  Marek Safar  <marek.safar@gmail.com>
3511
3512         * ecore.cs, expression.cs, nullable.cs: Implemeted enum binary add operation
3513         for incompatible underlying types, more to come, uff.
3514
3515 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
3516
3517         Fix gtest-388.cs
3518         * expression.cs (VariableReference.EmitAssign) <source is NewInstance>:
3519         Handle 'leave_copy'.
3520
3521 2008-04-25  Marek Safar  <marek.safar@gmail.com>
3522
3523         * expression.cs, nullable.cs: Implemented UnaryPlus expression.
3524
3525 2008-04-24  Raja R Harinath  <harinath@hurrynot.org>
3526
3527         Fix test-636.cs.  Sprinkle a few more 'EmitSideEffect's around
3528         * expression.cs (Unary.TryReduceConstant): Unwrap SideEffectConstant.
3529         * statement.cs (While, Do, For): Allow test to have side effects.
3530         (For.DoEmit): Always emit InitStatement.
3531
3532         Fix test-635.cs
3533         * expression.cs (Binary.DoResolve) <BitwiseAnd with zero constant>:
3534         Always create SideEffectConstant.
3535         (Binary.EnumLiftUp): Don't assume that the enumeration constant is
3536         of type EnumConstant.
3537
3538         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
3539         Handle 'right' being SideEffectConstant of type 'bool'.
3540
3541         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
3542         Use left.EmitBranchable instead of open coding it, so as to
3543         improve optimization opportunities.
3544
3545         * constant.cs (SideEffectConstant.EmitSideEffect): Simplify slightly.
3546
3547         * ecore.cs (Expression.EmitBranchable): Document some non-obvious
3548         assumptions.
3549         (Expression.EmitSideEffect): Document.
3550
3551 2008-04-23  Marek Safar  <marek.safar@gmail.com>
3552
3553         * expression.cs: Implemented NewArrayBounds, TypeIs, and TypeAs expressions.
3554
3555 2008-04-23  Marek Safar  <marek.safar@gmail.com>
3556
3557         * constant.cs, statement.cs: Use EmitSideEffect for constant if statement.
3558
3559 2008-04-23  Marek Safar  <marek.safar@gmail.com>
3560
3561         * ecore.cs, expression.cs, delegate.cs: Implemeted delegate instantiation
3562         conversion to expression tree.
3563
3564 2008-04-23  Marek Safar  <marek.safar@gmail.com>
3565
3566         * ecore.cs: Removed unused expression.
3567
3568 2008-04-22  Marek Safar  <marek.safar@gmail.com>
3569
3570         * expression.cs: Implemented NegateChecked and New expressions.
3571
3572 2008-04-22  Marek Safar  <marek.safar@gmail.com>
3573
3574         * convert.cs, nullable.cs, expression.cs: Implemented Negate expression.
3575
3576 2008-04-22  Raja R Harinath  <harinath@hurrynot.org>
3577
3578         Fix #351102
3579         * anonymous.cs (AnonymousMethodExpression.DoResolve): Mark as
3580         needing final 'ret' instruction.
3581
3582 2008-04-22  Marek Safar  <marek.safar@gmail.com>
3583
3584         * expression.cs: Disabled lifted binary conversion on ISO-1 profiles.
3585
3586 2008-04-21  Marek Safar  <marek.safar@gmail.com>
3587
3588         * expression.cs: Emit ldnull and not null expression as an instance argument
3589          of static method expression calls.
3590
3591 2008-04-21  Marek Safar  <marek.safar@gmail.com>
3592
3593         A fix for bug #378200
3594         * expression.cs: Fixed crash when creating parameterless expression tree
3595         method call.
3596
3597 2008-04-21  Marek Safar  <marek.safar@gmail.com>
3598
3599         A fix for bug #375297
3600         * anonymous.cs: Fixed crash when inferring from null argument anonymous
3601         method.
3602
3603 2008-04-21  Marek Safar  <marek.safar@gmail.com>
3604
3605         A fix for bug #377596
3606         * decl.cs, class.cs: Emit delegate type argument attributes.
3607
3608 2008-04-21  Marek Safar  <marek.safar@gmail.com>
3609
3610         A fix for bug #365314
3611         * generic.cs, ecore.cs: Type parameter declaration cannot be of generic type
3612         
3613 2008-04-21  Marek Safar  <marek.safar@gmail.com>
3614
3615         * cs-parser.jay, expression.cs: ComposedCast can work with type expressions
3616         only.
3617
3618 2008-04-21  Marek Safar  <marek.safar@gmail.com>
3619
3620         * generic.cs (TypeParameter): Removed redundant location.
3621
3622 2008-04-19  Marek Safar  <marek.safar@gmail.com>
3623
3624         * generic.cs, parameter.cs, namespace.cs, ecore.cs, class.cs, decl.cs,
3625         delegate.cs, iterators.cs, cs-parser.jay, const.cs, enum.cs: Use
3626         FullNamedExpression in all declaration type expression, statements will come
3627         later.
3628
3629 2008-04-18  Marek Safar  <marek.safar@gmail.com>
3630
3631         * generic.cs, namespace.cs, ecore.cs, class.cs, decl.cs, generic-mcs.cs,
3632         nullable.cs, expression.cs, enum.cs, doc.cs: Cleaning up type expressions.
3633
3634 2008-04-18  Marek Safar  <marek.safar@gmail.com>
3635
3636         * parameter.cs, delegate.cs, cs-parser.jay, expression.cs: Removed unused
3637         code.
3638
3639 2008-04-17  Marek Safar  <marek.safar@gmail.com>
3640
3641         * decl.cs, class.cs, generic.cs: Verify partial parts type parameters and
3642         constraints.
3643
3644 2008-04-17  Marek Safar  <marek.safar@gmail.com>
3645
3646         * decl.cs, class.cs, cs-parser.jay, ecore.cs, expression.cs: Unify all type
3647         name expressions.
3648         Also fixes #340463.
3649
3650 2008-04-17  Raja R Harinath  <harinath@hurrynot.org>
3651
3652         Hook up 'EmitSideEffect'
3653         * constant.cs (Constant.EmitSideEffect): New.
3654         (SideEffectConstant.Emit): Simplify.  Use EmitSideEffect.
3655         (SideEffectConstant.EmitSideEffect): New.
3656         * ecore.cs (BoxedCast.EmitBranchable): Remove.  We can't use an
3657         unconditional branch in EmitBranchable.
3658         (FieldExpr.EmitBranchable): New.
3659         * expression.cs (Unary.EmitSideEffect): New.
3660         (Binary.EmitSideEffect): New.
3661         (VariableReference.EmitSideEffect): New.  Do nothing.
3662
3663 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
3664
3665         Introduce 'EmitSideEffect'
3666         * ecore.cs (Expression.EmitSideEffect): New.
3667         (TypeCast): Rename from EmptyCast.
3668         (EmptyCast): New.
3669         (EmptyCast.EmitBranchable, EmptyCast.EmitSideEffect): Implement.
3670         (BoxedCast.EmitBranchable, BoxedCast.EmitSideEffect): Implement.
3671         * convert.cs, nullable.cs: Update to changes.
3672
3673 2008-04-16  Marek Safar  <marek.safar@gmail.com>
3674
3675         * class.cs, cs-parser.jay: Early check for base types expression.
3676
3677 2008-04-16  Marek Safar  <marek.safar@gmail.com>
3678
3679         * decl.cs (MemberName): Declare PrettyName as obsolete.
3680
3681 2008-04-16  Marek Safar  <marek.safar@gmail.com>
3682
3683         * namespace.cs: Use MemberName comparison.
3684
3685 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
3686
3687         Fix build break
3688         * decl.cs (MemberName.PrettyName): New.  Replaces the misnamed
3689         FullName.
3690         (MemberName.MethodName, MemberName.GetSignatureForError): Improve.
3691         (MemberName.FullyQualifiedName): New.  Provides the functionality
3692         that users assume FullName would have.
3693         * ecore.cs, namespace.cs: Update to changes.
3694
3695         * statement.cs (Using.assign): Make into ExpressionStatement.
3696         (Using.EmitPreTryBody): Simplify.
3697
3698 2008-04-16  Marek Safar  <marek.safar@gmail.com>
3699
3700         * report.cs: ColorFormat is protected.
3701         
3702         * rootcontext.cs: Unused fields clean-up.
3703         
3704         * namespace.cs: Made UsingEntry name private.
3705
3706 2008-04-16  Marek Safar  <marek.safar@gmail.com>
3707
3708         * cs-tokenizer.cs, location.cs: Removed unused field.
3709
3710 2008-04-16  Jan Oravec <jan.oravec@6com.sk>
3711             Raja R Harinath  <harinath@hurrynot.org>
3712
3713         Fix #379822
3714         * constant.cs (SideEffectConstant.value): Rename from 'left'.
3715         (SideEffectConstant.side_effect): Rename from 'right'.
3716         (SideEffectConstant..ctor): Normalize 'side_effect'.
3717         (SideEffectConstant.Emit): Emit 'value', not 'side_effect' as the
3718         value of this constant.
3719         * cfold.cs: Update to changes.
3720
3721 2008-04-15  Marek Safar  <marek.safar@gmail.com>
3722
3723         * cs-paser.jay: Removed unused variable.
3724         
3725         * driver.cs: Made Compile instance method.
3726
3727 2008-04-15  Raja R Harinath  <harinath@hurrynot.org>
3728
3729         * flowanalysis.cs (FlowBranching.MergeChild): Simplify.
3730
3731 2008-04-15  Marek Safar  <marek.safar@gmail.com>
3732
3733         * cs-paser.jay, namespace.cs: Simplified handling of namespace imports. 
3734
3735 2008-04-13  Jb Evain  <jbevain@novell.com>
3736
3737         * namespace.cs: update the System.Core fullname for 2.1
3738         * driver.cs: update the list of required assemblies for 2.1.
3739         Merged from the Moonlight 2 branch.
3740
3741 2008-04-11  Marek Safar  <marek.safar@gmail.com>
3742
3743         * assign.cs, ecore.cs, expression.cs, nullable.cs: More work on nullable
3744         types and user defined operators. User operators arguments has to be checked
3745         for null value before invocation, which also means no operator is called
3746         when any argument is not convertible to unwrapped nullable type.
3747         
3748 2008-04-09  Marek Safar  <marek.safar@gmail.com>
3749
3750         * convert.cs, ecore.cs, expression.cs, nullable.cs: Initial refactoring
3751         of Unary expressions to follow operator overloading rules precisely.
3752         Also fixes #321794, #323794
3753         
3754 2008-04-08  Marek Safar  <marek.safar@gmail.com>
3755
3756         * cs-parser.jay, expression.cs: Don't wrap Indirection expression in Unary
3757         expression.
3758         
3759 2008-04-08  Marek Safar  <marek.safar@gmail.com>
3760
3761         * expression.cs, ecore.cs: Implemented MemberInit expression.
3762         
3763 2008-04-08  Raja R Harinath  <harinath@hurrynot.org>
3764
3765         Fix mono/tests/exception4.cs
3766         * statement.cs (ExceptionStatement, TryCatch): Revert to using
3767         ec.NeedReturnLabel () rather emitting a 'nop'.
3768
3769         * statement.cs (ExceptionStatement.SomeCodeFollows): A hook for a
3770         simple heuristic.
3771         (TryCatch.SomeCodeFollows): Likewise.
3772         * flowanalysis.cs (FlowBranchingException): Call 'SomeCodeFollows'
3773         for 'break', 'continue' and 'return' statements inside a try.
3774         We're fairly sure that the generated IL stream will have more
3775         instructions textually following the try.
3776         (FlowBranchingTryCatch): Likewise.
3777
3778         * statement.cs (Throw.Resolve): Move CS0156 and CS0724 testing ...
3779         * flowanalysis.cs (FlowBranching.CheckRethrow): ... here and to its
3780         overrides.
3781
3782         * statement.cs (CollectionForeach.DisposableWrapper): Make a true
3783         wrapper -- forward everything to CollectionForeach.
3784         (CollectionForeach.NonDisposableWrapper): New.
3785         (CollectionForeach.EmitFinallyBody): Use 'endfinally' instruction
3786         instead of a pop + branch to end.
3787
3788 2008-04-07  Marek Safar  <marek.safar@gmail.com>
3789
3790         A fix for bug #377485
3791         * assign.cs, expression.cs, decl.cs, class.cs, ecore.cs, namespace.cs: 
3792         Propagate location for extension method groups. Report conversion failure at
3793         right place.
3794
3795 2008-04-07  Marek Safar  <marek.safar@gmail.com>
3796
3797         * anonymous.cs, expression.cs, ecore.cs, typemanager.cs: Implemented
3798         ListInit and Field expressions.
3799
3800 2008-04-06  Raja R Harinath  <harinath@hurrynot.org>
3801
3802         * iterators.cs (Iterator.EmitMoveNext): Remove try/fault wrapper.
3803         Since $PC is always -1 inside the body of MoveNext, the fault
3804         handler is a no-op.
3805         * flowanalysis.cs (FlowBranchingException.EmitFinally): Kill.
3806         * statement.cs (ExceptionStatement.emit_finally): Likewise.
3807         (ExceptionStatement.ResolveFinally): Drop 'branching' argument.
3808
3809         The denouement!  Fix #324708
3810         * iterators.cs (Iterator.EmitMoveNext): Reset $PC to -1 on entry.
3811         (Iterator.EmitYieldBreak): We no longer need to reset $PC.
3812         * statement.cs (ExceptionStatement.DoEmit): Actually emit the
3813         'finally' inside the finally clause.
3814
3815         * statement.cs (ExceptionStatement.DoEmit): Emit try/finally block
3816         inside an iterator.  Don't emit the body of the 'finally' inside
3817         the finally clause yet.
3818
3819         Use the ResumableStatement infrastructure for MoveNext ()
3820         * iterators.cs (Iterator.EmitMoveNext_NoResumePoints): New.
3821         (Iterator.EmitMoveNext): Use 'resume_points'.  Get rid of
3822         'old_resume_points'.  Move dispatcher upfront.
3823         (Iterator.MarkYield): Mark the 'resume_point' of a Yield.
3824         * statement.cs (ExceptionStatement.DoEmit): Emit a dispatcher if
3825         in an enumerator.  This encodes the main fix in this patch series
3826         -- we can only jump into the first instruction of a try from the
3827         outside, but we want to emit try/finally regions in iterators and
3828         resume in the middle of them.
3829
3830 2008-04-05  Raja R Harinath  <harinath@hurrynot.org>
3831
3832         * statement.cs (ExceptionStatement.ResolveFinally): Move setting
3833         of NeedReturnLabel here.
3834
3835         Introduce a common point for emitting try/finally to IL
3836         * statement.cs (ExceptionStatement.DoEmit): New.  Combines all the
3837         features of the various subclasses, which are now driven by ...
3838         (ExceptionStatement.EmitPreTryBody): ... this and ...
3839         (ExceptionStatement.EmitTryBody): ... this and the original
3840         EmitFinallyBody.
3841         (TryFinally, Lock, Using, UsingTemporary, DisposableWrapper):
3842         Remove DoEmit and update to follow above protocol.
3843
3844         * statement.cs (ExceptionStatement.EmitForDispose): If all labels
3845         of the dispatcher are the same, skip emitting the 'switch'.
3846         * iterator.cs (Iterator.EmitDispose): Update to changes.
3847
3848         Clean up handling of 'using' statement
3849         * statement.cs (UsingTemporary): New.  Carved out of ...
3850         (Using): ... this.  Simplify drastically.  Handle exactly
3851         one variable.
3852         * cs-parser.jay (using_statement): Split.  Create UsingTemporary
3853         or Using as appropriate.  If there are multiple variable declared,
3854         create nested Using statements.
3855         (resource_acquisition): Kill.
3856
3857         * statement.cs (ExceptionStatement.EmitForDispose): Use
3858         EmitFinallyBody, not EmitFinally.
3859
3860         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Remove.
3861         * iterator.cs: Update to changes.
3862
3863         Start using the ResumableStatement infrastructure
3864         * statement.cs (ResumeableStatement.PrepareForDispose): New.
3865         (ResumableStatement.EmitForDispose): New.
3866         (ExceptionStatement): Override them.
3867         * iterators.cs (Iterator.EmitDispose): Use PrepareForDispose and
3868         EmitForDispose to create the body of the Dispose method.  Don't
3869         use OldResumePoint.
3870
3871         * iterator.cs (Iterator.AddResumePoint): Move here from ...
3872         * statement.cs (Toplevel.AddResumePoint): ... here.
3873         (Toplevel.MoveNextStatement.Resolve): Create FlowBranchingIterator.
3874         * flowanalysis.cs (FlowBranchingIterator): New.
3875         * codegen.cs (EmitContext): Update to changes.
3876
3877         * iterators.cs (Iterator.OldResumePoint): Rename from ResumePoint.
3878         (Iterator.old_resume_points): Rename from 'resume_points'.
3879         (Iterator.MoveNextStatement): Remove unused class.
3880
3881         New infrastructure for try/finally in iterators (still unused)
3882         * flowanalysis.cs (FlowBranching.AddResumePoint): New.
3883         (FlowBranchingToplevel.AddResumePoint): Hook into
3884         ToplevelBlock.AddResumePoint.
3885         (FlowBranchingTryCatch): Move CS01626 and CS01631 checks here.
3886         (FlowBranchingException): Hook into ExceptionBlock.AddResumePoint.
3887         * statement.cs (ToplevelBlock.AddResumePoint): New.  Collect
3888         resume points and assign program-counter values.
3889         (ExceptionBlock.AddResumePoint): Collect resume points for
3890         de-muxer at the top of try block.
3891         * iterators.cs (Yield.CheckContext): Simplify.
3892         (Yield.Resolve): Use FlowBranching.AddResumePoint.
3893
3894 2008-04-04  Raja R Harinath  <harinath@hurrynot.org>
3895
3896         * flowanalysis.cs (FlowBranching.AddReturnOrigin): Change Location
3897         argument to an ExitStatement.
3898         (FlowBranchingException): Refactor saved origins code.
3899         * statement.cs (ExitStatement): Update to cahges.
3900         * iterator.cs (YieldBreak): Likewise.
3901
3902         * statement.cs (ResumableStatement): New.  Common base class for
3903         YieldReturn and ExceptionStatement.
3904         (ExitStatement): New.  Common base class for Return and YieldBreak.
3905         (Return): Update to changes.
3906         * iterator.cs (YieldBreak): Likewise.
3907         * lambda.cs (ContextualReturn): Likewise.
3908
3909         Fix #377028
3910         * ecore.cs (Expression.ResolveAsTypeStep): If '!silent' attempt to
3911         emit a meaningful error message.
3912
3913         Fix #324765, #319508
3914         * flowanalysis.cs (VariableInfo.IsEverAssigned): New.
3915         (VariableInfo.SetAssigned): Set it.
3916         * statement.cs (Block.UsageWarning): Use 'IsEverAssigned' to
3917         determine if CS0219 or CS0168 is appropriate.  Don't use
3918         flow-analysis information.
3919         (Block.Resolve): Use ec.EndFlowBranching, not ec.DoEndFlowBranching.
3920         * codegen.cs (EmitContext.DoEndFlowBranching): Kill.  Inline into ...
3921         (EmitContext.EndFlowBranching): ... this.
3922
3923 2008-04-03  Marek Safar  <marek.safar@gmail.com>
3924
3925         * class.cs, typemanager.cs: Emit volatile field with IsVolatile modifier.
3926
3927 2008-04-03  Marek Safar  <marek.safar@gmail.com>
3928
3929         A fix for bug #376508
3930         * convert.cs, expression.cs: Fixed difference between ImplicitConversion and
3931         ImplicitConversionExists.
3932
3933 2008-04-03  Marek Safar  <marek.safar@gmail.com>
3934
3935         * expression.cs (Binary): Added remaining binary operators to expression
3936         tree builder.
3937
3938         * nullable.cs: Optimize shift with null argument.
3939
3940 2008-04-03  Raja R Harinath  <harinath@hurrynot.org>
3941
3942         Fix minor IL regression
3943         * statement.cs (TryCatch..ctor): Add 'inside_try_finally' argument.
3944         (TryCatch.DoEmit): Use it to avoid creating another ExceptionBlock.
3945         * cs-parser.jay (try_statement): Update to changes.
3946
3947         * statement.cs (TryFinally.need_exc_block): Delete.
3948         (TryFinally): Update to changes.
3949
3950         Now all ExceptionStatements are unconditional
3951         * statement.cs (CollectionForeach.DisposableWrapper): New.
3952         Extract out the try/finally code into a new wrapper.
3953         (CollectionForeach.Resolve): Use it to simplify the code.
3954
3955 2008-04-02  Raja R Harinath  <harinath@hurrynot.org>
3956
3957         Start at simplifying ExceptionStatement semantics a bit
3958         * statement.cs (TryCatch, TryFinally): Split 'Try' into two pieces.
3959         * cs-parser.jay (try_statement): Update to changes.
3960         (opt_catch_clauses): Remove.
3961         * flowanalysis.cs: Update to changes.
3962         (FlowBranching.BranchingType.TryCatch): New.
3963         (FlowBranchingTryCatch): New.
3964
3965         * flowanalysis.cs (FlowBranching.BranchingType.SwitchSection): Kill.
3966         (FlowBranching.CreateBranching): Update to changes.
3967         (FlowBranchingBlock.AddSibling): Add sanity check.
3968         * codegen.cs (EmitContext.StartFlowBranching) <Block variant>:
3969         Update to changes.
3970
3971         * iterators.cs (Iterator.MarkFinally): Remove.
3972         * statement.cs (ExceptionStatement): Update to changes.
3973
3974         Add support for skipping over finally blocks at runtime.  First
3975         in a series to fix #324708
3976         * iterators.cs (Iterator.SkipFinally): New LocalBuilder.
3977         (Iterator.EmitMoveNext): Initialize it.
3978         * statement.cs (ExceptionStatement.EmitFinally): Use it to emit a
3979         branch over the body of the 'finally' clause.
3980
3981 2008-03-31  Raja R Harinath  <harinath@hurrynot.org>
3982
3983         Avoid lopsided use of Foo/DoFoo names
3984         * statement.cs (ExpressionStatement.EmitFinallyBody):
3985         Rename from EmitFinally.
3986         (ExpressionStatement.EmitFinally): Rename from DoEmitFinally.
3987         * iterator.cs: Update to changes.
3988
3989 2008-04-02  Marek Safar  <marek.safar@gmail.com>
3990
3991         * ecore.cs, expression.cs, nullable.cs: ConditionalLogicalOperator is now
3992         based on UserOperatorCall. More binary nullable operators clean up.
3993
3994 2008-04-02  Martin Baulig  <martin@ximian.com>
3995
3996         * symbolwriter.cs: Remove the `#if !DISABLE_TERRANIA_CHANGES' conditionals.
3997
3998 2008-04-02  Marek Safar  <marek.safar@gmail.com>
3999
4000         * nullable.cs: Merge user and empty conversions when lifting expression
4001         trees.
4002         
4003         * expression.cs (StringConcat): Implemented expression tree representation.
4004
4005 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4006
4007         * nullable.cs: When lifting null literal and a user operator exists, no call 
4008         is made.
4009         
4010 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4011
4012         * nullable.cs, ecore.cs, expression.cs: Convert null arithmetic to lifted
4013         null.
4014
4015 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4016
4017         * nullable.cs, expression.cs: Use namespace instead heavily nested
4018         monster abstract class.
4019
4020 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4021
4022         * ecore.cs, convert.cs, constant.cs, nullable.cs, expression.cs: Implemented
4023         lifting of null literal and user operators. Clean up of some temporary
4024         nullable hacks.
4025
4026 2008-03-30  Raja R Harinath  <harinath@hurrynot.org>
4027
4028         Fix #368224, test-629.cs
4029         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Return true
4030         if it crossed an unwind-protect boundary.
4031         * iterators.cs (Yield.CheckContext): Relax check for 'yield break'.
4032         (Yield.Resolve, Yield.DoEmit): Track whether the yield occurs
4033         inside an unwind-protected region.
4034         (YieldBreak.Resolve, YieldBreak.DoEmit): Likewise.
4035         (Iterator.MarkYield): Add 'unwind_protect' parameter.  Emit a
4036         'leave' instead of a 'br' if unwind-protected.
4037         (Iterator.EmitYieldBreak): Likewise.
4038
4039 2008-03-29  Gert Driesen  <drieseng@users.sourceforge.net>
4040
4041         * driver.cs: Only define versioninfo resources if no win32 resource
4042         file was specified.
4043
4044 2008-03-28  Marek Safar  <marek.safar@gmail.com>
4045
4046         A fix for bug #372375
4047         * convert.cs: Fixed boxing of nullable types.
4048
4049 2008-03-28  Marek Safar  <marek.safar@gmail.com>
4050
4051         * typemanager.cs: Initialize InternalsVisibleTo as the very first optional
4052         type.
4053
4054 2008-03-28  Marek Safar  <marek.safar@gmail.com>
4055
4056         A fix for bug #374619
4057         * nullable.cs: Fixed guarding of EmitBitwiseBoolean.
4058         
4059 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4060
4061         * lambda.cs: Check return type only for invocation.
4062         
4063 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4064
4065         A fix for bug #374214
4066         * ecore.cs: Correctly report argument type mismatch.
4067
4068 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4069
4070         * convert.cs (ImplicitReferenceConversionCore): Correctly compare enum type
4071         and not rely on broken IsEnum.
4072
4073 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4074
4075         * nullable.cs: New file, extracted from generic.cs.
4076         
4077         * generic.cs, generic-mcs.cs, *.csproj, *.sources: Updated.
4078
4079 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4080
4081         * generic.cs, convert.cs, generic-mcs.cs, expression.cs: Added lifting of
4082         predefined comparison operators and null literals.
4083         
4084         * report.cs: New warning ID.
4085         
4086 2008-03-25  Marek Safar  <marek.safar@gmail.com>
4087
4088         A fix for bug #370577
4089         * lambda.cs: Check return type too.
4090
4091 2008-03-25  Marek Safar  <marek.safar@gmail.com>
4092
4093         A fix for bug #372846
4094         * class.cs: Automatic properties can be declared as unsafe.
4095
4096 2008-03-20  Marek Safar  <marek.safar@gmail.com>
4097
4098         * location.cs: Use string based concatenation.
4099         
4100         * expression.cs: LiftedBinaryOperator is gmcs only.
4101         
4102 2008-03-20  Marek Safar  <marek.safar@gmail.com>
4103
4104         * generic.cs, literal.cs, ecore.cs, expression.cs: Ongoing work on nullable
4105         conversions rules and expression trees.
4106
4107 2008-03-19  Marek Safar  <marek.safar@gmail.com>
4108
4109         * delegate.cs: Use extension method source as delegate target.
4110
4111 2008-03-19  Marek Safar  <marek.safar@gmail.com>
4112
4113         * generic.cs, generic-mcs.cs, expression.cs, ecore.cs: Rewrote nullable
4114         binary operations to be purely based on binary operations and optimized
4115         emitted code (30% less in some cases). Introduced ReducedExpression for ETs
4116         and other ET refactoring.
4117         
4118         * typemanager.cs: Fixed warning.
4119         
4120 2008-03-17  Marek Safar  <marek.safar@gmail.com>
4121
4122         * class.cs, decl.cs, delegate.cs: Do protected modifier check on each member
4123         
4124         * symbolwriter.cs: Fixed.
4125
4126 2008-03-17  Marek Safar  <marek.safar@gmail.com>
4127
4128         * anonymous.cs, driver.cs: Reset anonymous types counters.
4129
4130 2008-03-17  Marek Safar  <marek.safar@gmail.com>
4131
4132         * ecore.cs (MethodGroupExpr): Skip first candidate, it's already the best.
4133         
4134         * class.cs: Use fullname for all type member definitions.
4135         
4136 2008-02-19  Martin Baulig  <martin@ximian.com>
4137
4138         * class.cs
4139         (IMethodData.EmitExtraSymbolInfo): New interface method.
4140         (MethodData.Emit): Call method.EmitExtraSymbolInfo().
4141         (MethodOrOperator.EmitExtraSymbolInfo): Implement this new
4142         interface method here as an empty public virtual method.
4143
4144         * anonymous.cs
4145         (AnonymousMethodMethod.ctor): Added `string real_name' argument.
4146         (AnonymousMethodMethod.EmitExtraSymbolInfo): Override and call
4147         CodeGen.SymbolWriter.SetRealMethodName().       
4148
4149 2008-02-18  Martin Baulig  <martin@ximian.com>
4150
4151         * anonymous.cs
4152         (ScopeInfo.EmitType): Override this and emit debugging
4153         information for captured variables.
4154         (RootScopeInfo.EmitType): Override this and emit symbol
4155         information for a captured `this'.
4156
4157 2008-02-15  Martin Baulig  <martin@ximian.com>
4158
4159         * iterators.cs: Emit debugging info.
4160
4161         * codegen.cs
4162         (EmitContext.Flags): Add `OmitDebuggingInfo'.
4163         (EmitContext.OmitDebuggingInfo): New public property.
4164
4165         * statement.cs
4166         (While): Override Emit() and don't emit symbol info there; do it
4167         inside DoEmit() instead.
4168         (Block.Emit): Omit symbol information while emitting the scope
4169         initializers; don't ec.Mark() the `EndLocation'.  Fix the lexical
4170         block logic.
4171         (ExplicitBlock.IsIterator): Moved here from `ToplevelBlock'.
4172         (ToplevelBlock.MakeIterator): Pass the `flags' to `ExplicitBlock's
4173         .ctor to make `IsIterator' work.
4174
4175 2008-03-14  Martin Baulig  <martin@ximian.com>
4176
4177         * symbolwriter.cs: Added the new symbol writer function from the
4178         debugger's `terrania' branch; temporarily enclose them inside
4179         `#if !DISABLE_TERRANIA_CHANGES' conditionals until I'm back from
4180         my vacations.
4181
4182 2008-03-14  Martin Baulig  <martin@ximian.com>
4183
4184         * symbolwriter.cs
4185         (SymbolWriter): Make this a public static class.
4186
4187         * codegen.cs
4188         (CodeGen.SymbolWriter): Removed; use the new static `SymbolWriter'
4189         class instead of using `if (CodeGen.SymbolWriter != null)' everywhere.
4190
4191 2008-03-14  Marek Safar  <marek.safar@gmail.com>
4192
4193         A fix for bug #370577
4194         * statement.cs, lambda.cs: Added extra limitations when dealing with void
4195         return type.
4196         
4197 2008-03-14  Marek Safar  <marek.safar@gmail.com>
4198
4199         * typemanager.cs (CSharpName): Made 250 times faster.
4200
4201 2008-03-13  Marek Safar  <marek.safar@gmail.com>
4202
4203         * ecore.cs, expression.cs: Emit conversion for ET shift argument.
4204         
4205 2008-03-12  Marek Safar  <marek.safar@gmail.com>
4206
4207         * generic.cs, typemanager.cs, enum.cs, codegen.cs, statement.cs: Try not to
4208         crash when predefined field does not exist.
4209         
4210 2008-03-12  Marek Safar  <marek.safar@gmail.com>
4211
4212         * ecore.cs (PropertyExpr): Fixed IsSingleDimensionalArrayLength regression.
4213         
4214 2008-03-12  Marek Safar  <marek.safar@gmail.com>
4215
4216         * class.cs (FixedField): Don't crash when contructors are missing.
4217
4218 2008-03-11  Marek Safar  <marek.safar@gmail.com>
4219
4220         * typemanager.cs, namespace.cs, literal.cs, ecore.cs, class.cs, decl.cs,
4221         convert.cs, constant.cs, expression.cs, statement.cs: Use same method to
4222         check internal types accessibility for internal and external types.
4223         Replaced EnumToUnderlying by GetEnumUnderlyingType.
4224
4225 2008-03-11  Marek Safar  <marek.safar@gmail.com>
4226
4227         * support.cs, typemanager.cs, pending.cs, ecore.cs, class.cs, delegate.cs
4228         convert.cs, const.cs, anonymous.cs, constant.cs, expression.cs,
4229         attribute.cs, statement: Use corect instance of predefined types (work
4230         related to #364674).
4231
4232 2008-03-07  Marek Safar  <marek.safar@gmail.com>
4233
4234         * expression.cs (TypeOfVoid): Fixed predefined method initialization.
4235         
4236 2008-03-07  Marek Safar  <marek.safar@gmail.com>
4237
4238         * generic.cs, typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, 
4239         class.cs, delegate.cs, iterators.cs, const.cs, constant.cs, driver.cs,
4240         expression.cs, attribute.cs, codegen.cs, statement.cs: TypeManager optional
4241         predefined types clean up, delayed predefined types members initialization
4242         (work related to #364674).
4243
4244 2008-03-05  Marek Safar  <marek.safar@gmail.com>
4245
4246         * typemanager.cs (IsFriendAssembly): InternalsVisibleTo is not mandatory.
4247         
4248 2008-03-05  Marek Safar  <marek.safar@gmail.com>
4249
4250         * typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, class.cs, decl.cs,
4251         delegate.cs, convert.cs, driver.cs, attribute.cs, codegen.cs: TypeManager
4252         predefined types clean up (work related to #364674).
4253
4254 2008-03-04  Marek Safar  <marek.safar@gmail.com>
4255
4256         * ecore.cs: Print an error message instead of throwing exception.
4257         
4258 2008-03-04  Marek Safar  <marek.safar@gmail.com>
4259
4260         * generic.cs, typemanager.cs, literal.cs, convert.cs, cfold.cs, constant.cs,
4261         expression.cs, statement.cs: Unififed null literal representation.
4262
4263 2008-03-03  Marek Safar  <marek.safar@gmail.com>
4264
4265         * anonymous.cs, cfold.cs, convert.cs, delegate.cs, doc.cs, ecore.cs,
4266         expression.cs: Refactored binary operators resolve phase and improved speed.
4267         The nullable code is still missing and won't work correctly, more fixes
4268         required.
4269
4270         It also fixes #323726, #324312, #324248, and many other unreported issues.
4271
4272 2008-02-29  Zoltan Varga  <vargaz@gmail.com>
4273
4274         * report.cs (FeatureIsNotAvailable): Use 'mcs1' instead of 'mcs', and 'mcs' 
4275         instead of 'gmcs'.
4276
4277 2008-02-27  Marek Safar  <marek.safar@gmail.com>
4278
4279         * ecore.cs: Clean-up and split BetterConversion.
4280         
4281 2008-02-25  Raja R Harinath  <harinath@hurrynot.org>
4282
4283         Fix #363791
4284         * enum.cs (EnumMember.Value): Only access 'value' if
4285         ResolveValue says it's ok.
4286         (EnumMember.DoResolveValue): Don't set prev_member.value.
4287         (Enum.GetDefinition): Reverse arguments of Equals --
4288         EnumMember.Value can return 'null'.
4289
4290         * statement.cs (Switch.Error_AlreadyOccurs): Fix typo in name.
4291
4292 2008-02-22  Marek Safar  <marek.safar@gmail.com>
4293
4294         * generic.cs, expression.cs: More ongoing work on expression trees.
4295         
4296 2008-02-21  Marek Safar  <marek.safar@gmail.com>
4297
4298         * class.cs, typemanager.cs: Rewrote operator matching logic to correctly
4299         handle missing matches when mutiple operators exist.
4300         
4301 2008-02-20  Marek Safar  <marek.safar@gmail.com>
4302
4303         A fix for bug #363218
4304         * expression.cs (ArrayCreation.Clone): Deal with multi-dimensional
4305         initializers.
4306         
4307 2008-02-20  Marek Safar  <marek.safar@gmail.com>
4308
4309         * expression.cs, constant.cs, cfold.cs: Yet another side-effect constant
4310         update. This time to deal correctly with SideEffectConstant expression used
4311         as an argument for another constant folding.
4312
4313 2008-02-20  Raja R Harinath  <harinath@hurrynot.org>
4314
4315         * typemanager.cs (DropGenericMethodArguments): Ensure we get an underlying
4316         MethodBuilder.
4317
4318 2008-02-19  Marek Safar  <marek.safar@gmail.com>
4319
4320         * constant.cs, cfold.cs: SideEffectConstant results can apply for folding.
4321
4322 2008-02-19  Marek Safar  <marek.safar@gmail.com>
4323
4324         A fix for bug #328136
4325         * expression.cs: Do not fold immediately LogicalAnd operators when the left
4326         side is a false constant, because we still need to evaluate the right-hand
4327         side.
4328
4329         * statement.cs (If): Emit two types of boolean constants (simple constant,
4330         side-effect constant).
4331
4332 2008-02-19  Marek Safar  <marek.safar@gmail.com>
4333
4334         * constant.cs (SideEffectConstant): Don't emit boolean constant.
4335
4336         * expression.cs: Fold immediately LogicalAnd operators when both sides are
4337         constants.
4338
4339 2008-02-18  Marek Safar  <marek.safar@gmail.com>
4340
4341         A fix for bug #361457
4342         * ecore.cs (IsApplicable): Params methods have lower priority.
4343
4344         * support.cs: Return correct parameter modifier for params types.
4345
4346 2008-02-18  Marek Safar  <marek.safar@gmail.com>
4347
4348         * generic.cs (TypeParameter): Cache attribute target name.
4349
4350         * support.cs: Removed unused variable.
4351
4352         * typemanager.cs: Removed debugging leftover.
4353
4354         * ecore.cs: Use local type instead of a property;
4355
4356         * class.cs (VerifyMembers): Consider also parent to test whether type member
4357         is local or public.
4358
4359         * expression.cs (FullMethodDesc): Removed.
4360
4361         * attribute.cs (IsValidArgumentType): Made static.
4362
4363 2008-02-17  Raja R Harinath  <harinath@hurrynot.org>
4364
4365         Cleanup to be more readable.
4366         * Makefile (GMCS_PROFILE): Remove.
4367         (COMPILER_NAME): New helper.
4368
4369 2008-02-15  Miguel de Icaza  <miguel@novell.com>
4370
4371         * cs-tokenizer.cs: if a conditional expression happens inside a
4372         (...) this also means that we do not need to de-ambiguate between
4373         an parenthesized expression and a cast.
4374
4375         Fixes 346484.
4376
4377         * constant.cs (SideEffectConstant): a constant value that happens
4378         to have a side effect.
4379
4380         Fixes the build regressions introduced by the fix for #359789
4381
4382 2008-02-14  Rodrigo Kumpera  <rkumpera@novell.com>
4383
4384         * expression.cs (Conditional.Emit): when emitting the ternary
4385         operator, use local variables to generate code verifiable code.
4386
4387         The verifier cannot infer that the type on stack before the
4388         stloc.0 is executed is of type ParentB. This happens because the
4389         stack merge algorithm uses only parent types when deciding which
4390         is the common type.  This is described in Part III 1.8.1.3 of ECMA
4391         335.
4392
4393         This code compiled with mcs is not verifiable under MS. The MS
4394         verifier picks the first common interface of Foo and Bar, which is
4395         wrong, but doesn't use a full join type of the 2 interfaces.
4396
4397         CSC uses a clever hack to compile such code in a verifiable
4398         way. It stores the intermediate values in a local variable with
4399         the expected type.
4400
4401         Fixes: #358102
4402
4403 2008-02-14  Miguel de Icaza  <miguel@novell.com>
4404
4405         * expression.cs: Do not fold BitwiseAnd operators when the left
4406         side is a false constant, because we still need to evaluate the
4407         right-hand side.
4408
4409         Fixes #359789
4410
4411         * support.cs: Instead of throwing an InternalErrorException when
4412         the position of the stream is outside the boundary of our buffer,
4413         reset the state of the reader, and restart the reading from the
4414         beginning of the file.
4415
4416 2008-02-14  Marek Safar  <marek.safar@gmail.com>
4417
4418         * generic.cs (TypeParameter.GetMembers): Is not supported operation.
4419
4420 2008-02-14  Marek Safar  <marek.safar@gmail.com>
4421
4422         A fix for bug #361686
4423         * decl.cs: A protected types used inside a private class which parents
4424         derives from the protected class are accessible.
4425
4426 2008-02-13  Marek Safar  <marek.safar@gmail.com>
4427
4428         * generic.cs (ConstraintChecker): Use cached member lookup when looking for
4429         the parameterless constructor.
4430
4431 2008-02-13  Marek Safar  <marek.safar@gmail.com>
4432
4433         * generic.cs, typemanager.cs, iterators.cs, codegen.cs: Refactored core
4434         lookup methods to use standard member cache when doing member lookup.
4435
4436 2008-02-12  Marek Safar  <marek.safar@gmail.com>
4437
4438         * driver.cs: Don't report full path for referenced module as assembly error.
4439
4440 2008-02-12  Marek Safar  <marek.safar@gmail.com>
4441
4442         * Makefile: Fixed `qh' target to work on all machines.
4443
4444         * report.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs, anonymous.cs,
4445         expression.cs, codegen.cs, statement.cs, doc.cs: Replaced type IsSubclassOf
4446         and HasElementType with TypeManager implementation.
4447
4448 2008-02-08  Marek Safar  <marek.safar@gmail.com>
4449
4450         A fix for bugs #325134, #359749
4451         * expression.cs, ecore.cs: Try to resolve an extension method even if the
4452         first binds point to non-method member expression.
4453
4454 2008-02-08  Marek Safar  <marek.safar@gmail.com>
4455
4456         * cs-parser.jay: Null coalescing operator is not part of ISO-1.
4457
4458 2008-02-08  Marek Safar  <marek.safar@gmail.com>
4459
4460         A fix for bugs #321394, #323028
4461         * generic.cs, parameter.cs, ecore.cs, class.cs, decl.cs, delegate.cs:
4462         Reworked naive IsAccessibleAs implementation to handle nested types.
4463
4464 2008-02-05  Jb Evain  <jbevain@novell.com>
4465
4466         * class.cs: use generic type comparison for parameters
4467         as well.
4468
4469 2008-02-05  Marek Safar  <marek.safar@gmail.com>
4470
4471         A fix for bug #325372
4472         * class.cs: Use generic type comparison when testing method signatures.
4473
4474 2008-02-05  Marek Safar  <marek.safar@gmail.com>
4475
4476         A fix for bug #357047
4477         * ecore.cs: Applied C# 3.0 changes to better conversion.
4478
4479 2008-02-05  Marek Safar  <marek.safar@gmail.com>
4480
4481         A fix for bug #358374
4482         * cs-parser.jay: Correctly set modifiers for all constructor types.
4483
4484 2008-02-04  Marek Safar  <marek.safar@gmail.com>
4485
4486         A fix for bug #355251
4487         * generic.cs: Added base class constraint based type inference.
4488
4489 2008-02-01  Marek Safar  <marek.safar@gmail.com>
4490
4491         A fix for bug #357255
4492         * decl.cs: One more missing visibility check.
4493
4494 2008-02-01  Marek Safar  <marek.safar@gmail.com>
4495
4496         * support.cs: Fixed broken return.
4497
4498 2008-01-25  Marek Safar  <marek.safar@gmail.com>
4499
4500         * report.cs: Correctly reset warnings count after probing.
4501
4502 2008-01-25  Martin Baulig  <martin@ximian.com>
4503
4504         * namespace.cs
4505         (NamespaceEntry.SymbolFileID): Make this work again after
4506         MemberName.ToString() is gone.
4507
4508 2008-01-25  Marek Safar  <marek.safar@gmail.com>
4509
4510         * expression.cs: Implemented Divide, Equal, ExclusiveOr, GreaterThanOrEqual
4511         expressions.
4512
4513 2008-01-25  Marek Safar  <marek.safar@gmail.com>
4514
4515         * generic.cs: Use full implicit conversion for type inference fixing.
4516
4517 2008-01-24  Marek Safar  <marek.safar@gmail.com>
4518
4519         * ecore.cs, expression.cs, generic.cs: Implemented Convert, ConvertChecked.
4520         Fixed user operator conversions.
4521
4522 2008-01-24  Marek Safar  <marek.safar@gmail.com>
4523
4524         * generic.cs: Do nullable type to null comparison optimization during
4525         resolve phase.
4526
4527 2008-01-24  Marek Safar  <marek.safar@gmail.com>
4528
4529         A fix for bug #355163
4530         * generic.cs: Enabled l-value resolve on nullable expressions.
4531
4532 2008-01-24  Marek Safar  <marek.safar@gmail.com>
4533
4534         A fix for bug #353986
4535         * class.cs: Ingore static ctors with parameters for any further checks.
4536
4537 2008-01-24  Marek Safar  <marek.safar@gmail.com>
4538
4539         A fix for bug #354310
4540         * namespace.cs: Removed redundant check.
4541
4542 2008-01-24  Marek Safar  <marek.safar@gmail.com>
4543
4544         A fix for bug #354928
4545         * expression.cs: ElementInitializers can be resolved only once.
4546
4547 2008-01-24  Marek Safar  <marek.safar@gmail.com>
4548
4549         * convert.cs, ecore.cs, expression.cs, generic.cs: Implemented Coalesce and
4550         Condition expressions.
4551
4552 2008-01-23  Marek Safar  <marek.safar@gmail.com>
4553
4554         * codegen.cs: Fixed AssemblyBuilder initialization on other platforms.
4555
4556 2008-01-22  Marek Safar  <marek.safar@gmail.com>
4557
4558         * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool conversion is
4559         not allowed.
4560
4561         * generic.cs: Implemented coalesce expression.
4562
4563 2008-01-22  Marek Safar  <marek.safar@gmail.com>
4564
4565         A fix for bug #355145
4566         * anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
4567         expression tree type inference.
4568
4569 2008-01-22  Raja R Harinath  <harinath@hurrynot.org>
4570
4571         Fix #354663
4572         * expression.cs (Binary.IsUnsignedType): Fix typo.
4573
4574 2008-01-22  Marek Safar  <marek.safar@gmail.com>
4575
4576         * ecore.cs, expression.cs, generic.cs: Implemented NewArrayInit expression.
4577
4578 2008-01-22  Marek Safar  <marek.safar@gmail.com>
4579
4580         A fix for bug #355161
4581         * ecore.cs, expression.cs: Wider range of extension method supported
4582         expressions.
4583
4584 2008-01-22  Gert Driesen  <drieseng@users.sourceforge.net>
4585
4586         * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct
4587         AssemblyBuilder to operate in compiler context. Fixes mcs part of
4588         bug #354970.
4589
4590 2008-01-22  Marek Safar  <marek.safar@gmail.com>
4591
4592         A fix for bug #355148
4593         * ecore.cs, expression.cs: Correctly report misused ref and out modifiers.
4594
4595 2008-01-22  Miguel de Icaza  <miguel@novell.com>
4596
4597         * expression.cs (CreateExpressionTree): Add support for or and
4598         logical or, and indent following the coding conventions.
4599
4600         * typemanager.cs (LinqExpression): renamed from
4601         ExpressionTreeManager, for a shorter name.
4602
4603         Use TypeManager.CoreLookupType to lookup types from our core
4604         assemblies and turn those into "Type" variables.
4605
4606         Consumers that previously used "Namespace" and "Type" from this
4607         class should instead use the TypeExpression which is a type that
4608         is fully resolved (without involving the regular C# resolution
4609         rules). 
4610
4611         This typically looks like this:
4612
4613         TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
4614         new MemberAccess (texpr, name, type_arguments, loc)
4615
4616         This avoids the problem in: #355178
4617
4618 2008-01-21  Marek Safar  <marek.safar@gmail.com>
4619
4620         * cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
4621         feature in parser only as we do in other cases.
4622         
4623 2008-01-21  Marek Safar  <marek.safar@gmail.com>
4624
4625         * attribute.cs, ecore.cs, class.cs, delegate.cs, expression.cs, linq.cs,
4626         typemanager.cs: A refactoring of params arguments to reuse existing
4627         expressions (params -> array initializer) to emit params argument instead
4628         of specialized handling.
4629         It was required by expression tree implementation and it has other benefits
4630         as well, we now apply same optimization for params arguments as we do for
4631         array initializers.
4632         
4633 2008-01-18  Marek Safar  <marek.safar@gmail.com>
4634
4635         A fix for bug #353526
4636         * generic.cs: A type inference of params arguments may not required any
4637         temporary array creation.
4638         
4639 2008-01-18  Marek Safar  <marek.safar@gmail.com>
4640
4641         A fix for bug #353534
4642         * generic.cs, ecore.cs, expression.cs: A method group type inference is
4643         supported for delegates only.
4644         
4645 2008-01-18  Marek Safar  <marek.safar@gmail.com>
4646
4647         * generic.cs: Fixed 3.0 type inference fixing phase to determine a unique
4648         type for more than 1 candidates.
4649         
4650 2008-01-18  Marek Safar  <marek.safar@gmail.com>
4651
4652         * typemanager.cs, ecore.cs, expression.cs: Implemented ArrayLength and Call
4653         expressions.
4654         
4655 2008-01-16  Marek Safar  <marek.safar@gmail.com>
4656
4657         * generic.cs, typemanager.cs, lambda.cs, parameter.cs, ecore.cs, constant.cs,
4658         expression.cs: Implemented Add, And, AndAlso, and ArrayIndex (without unary
4659         operator) expressions. 
4660                 
4661 2008-01-16  Zoltan Varga  <vargaz@gmail.com>
4662
4663         * statement.cs: Avoid declaring an IL variable for this_variable since it is
4664         not accessed from the generated IL.
4665
4666 2008-01-14  Marek Safar  <marek.safar@gmail.com>
4667
4668         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, class.cs, delegate.cs,
4669         iterators.cs, convert.cs, assign.cs, anonymous.cs, expression.cs,
4670         statement.cs: The first expression tree implementation drop, mostly
4671         infrastructure work.
4672
4673 2008-01-14  Marek Safar  <marek.safar@gmail.com>
4674
4675         * ecore.cs (IsNestedChild): Refactored.
4676
4677 2008-01-11  Marek Safar  <marek.safar@gmail.com>
4678
4679         * lambda.cs: Don't use a cast on unknown expression statement.
4680
4681 2008-01-10  Geoff Norton  <gnorton@novell.com>
4682
4683         * cs-tokenizer.cs: One more token to distinguish between method and lambda
4684         arguments
4685
4686 2008-01-09  Marek Safar  <marek.safar@gmail.com>
4687
4688         * doc.cs: Report better /doc crash details.
4689         
4690 2008-01-09  Marek Safar  <marek.safar@gmail.com>
4691
4692         A fix for bug #352536
4693         * ecore.cs, assign.cs, codegen.cs: Check event assignments.
4694
4695 2008-01-08  Marek Safar  <marek.safar@gmail.com>
4696
4697         A fix for bug #352287
4698         * ecore.cs, expression.cs: Do `this' access checking in all member access
4699         expressions.
4700         
4701 2008-01-08  Marek Safar  <marek.safar@gmail.com>
4702
4703         * rootcontext.cs, driver.cs: Switch to linq mode by default.
4704         
4705         * report.cs: Reset message stacks.
4706         
4707 2008-01-08  Marek Safar  <marek.safar@gmail.com>
4708
4709         * generic.cs (InferInPhases): Correctly calculate params position.
4710         
4711 2008-01-08  Marek Safar  <marek.safar@gmail.com>
4712
4713         * cs-tokenizer.cs: No need to parse full string when parsing lambda
4714         arguments.
4715
4716 2008-01-07  Marek Safar  <marek.safar@gmail.com>
4717
4718         * cs-tokenizer.cs: Enabled lambda arguments micro-parser for all profiles.
4719         
4720         * decl.cs (LookupNamespaceOrType): Don't cache names which caused an error.
4721         
4722         * driver.cs: Updated --help option.
4723         
4724 2008-01-07  Marek Safar  <marek.safar@gmail.com>
4725
4726         * generic.cs (InferParamsTypeArguments): Removed.
4727         (InferInPhases): Add params type inference.
4728         (LowerBoundInference): Fixed scoring mechanism.
4729         
4730         * cs-tokenizer.cs (PreProcessPragma): Use Location instead of line.
4731         
4732 2008-01-06  Gert Driesen  <drieseng@users.sourceforge.net>
4733
4734         * typemanager.cs: On 2.0 profile, GetPublicKeyToken returns an empty
4735         byte array for unsigned "baked" assemblies.
4736
4737 2008-01-05  Gert Driesen  <drieseng@users.sourceforge.net>
4738
4739         * codegen.cs: AssemblyName.GetPublicKey returns a zero-length byte
4740         array for assemblies that are not strongnamed.
4741
4742 2008-01-04  Marek Safar  <marek.safar@gmail.com>
4743
4744         A fix for bug #351481
4745         * expression.cs (MemberAccess.ResolveNamespaceOrType): Use correct
4746         declaring type for nested generic types.
4747         
4748 2008-01-04  Marek Safar  <marek.safar@gmail.com>
4749
4750         * namespace.cs, class.cs, decl.cs, cs-parser.jay: Use GetSignatureForError
4751         instead of ToString.
4752         
4753 2008-01-03  Marek Safar  <marek.safar@gmail.com>
4754
4755         A fix for bug #351047
4756         * expression.cs (Binary.ResolveOperator): Allow equality operators between
4757         null and structs only when equality and inequality operators are defined
4758         either as an user-operators or predefined operators.
4759         
4760 2008-01-03  Marek Safar  <marek.safar@gmail.com>
4761
4762         A fix for bug #351047
4763         * generic.cs, typemanager.cs, class.cs: New IsReferenceType helper method.
4764         
4765 2008-01-03  Marek Safar  <marek.safar@gmail.com>
4766
4767         A fix for bug #351257
4768         * cs-tokenizer.cs: Advance line number for '\r' correctly.
4769         
4770 2008-01-03  Marek Safar  <marek.safar@gmail.com>
4771
4772         A fix for bug #351157
4773         * class.cs (Using): Fixed yet another broken cloning.
4774         
4775         (Block): Put back more sensible default value for statements.
4776         
4777 2008-01-01  Gert Driesen  <drieseng@users.sourceforge.net>
4778
4779         * codegen.cs: Allow AssemblyVersion with only major version component.
4780         Fixes bug #351055.
4781
4782 2007-12-29  Marek Safar  <marek.safar@gmail.com>
4783
4784         A fix for bug #324654
4785         * class.cs: Use FullName property as member name.
4786
4787 2007-12-28  Marek Safar  <marek.safar@gmail.com>
4788
4789         A fix for bug #342117
4790         * generic.cs (ConstraintChecker): Struct constraint also satisfies default
4791         constructor constraint.
4792
4793 2007-12-28  Marek Safar  <marek.safar@gmail.com>
4794
4795         A fix for bug #338273
4796         * class.cs (ProbertyBase): Access modifier checks are required for overrides
4797         only.
4798
4799 2007-12-28  Marek Safar  <marek.safar@gmail.com>
4800
4801         A fix for bug #350839
4802         * ecore.cs (MethodroupExpr): Probing hacks are no longer required.
4803
4804 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
4805
4806         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
4807         GHOP:
4808         
4809         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
4810
4811         * statement.cs: Changed some Hashtables to use HybridDictionaries
4812         instead. It was observed that some HashTables only contained a few
4813         items in the vast majority of cases. Since HybridDictionary is
4814         more efficient on small sets (<10 elements), "known_variables"
4815         from class ExplicitBlock as well as "labels" and "constants " from
4816         class Block were changed to HybridDictionaries. 
4817
4818         Atsai results: (56216kb->54987kb)
4819
4820         Miguel results (bootstrap of mcs): 59819kb -> 59290kb
4821
4822
4823 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
4824
4825         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
4826         GHOP:
4827         
4828         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
4829         
4830         * expression.cs: foreach loop to for loop, saved on allocation of
4831         enumerator (59333kb->59141kb)
4832
4833         * statement.cs. Changed foreach loops to for loops, saved on
4834         allocation of enumerator (59141kb->59006kb)
4835
4836         * decl.cs: ArrayLists in .NET 1.1 allocate 16 elements by default
4837         when constructed with no specified capacity. This was causing a
4838         few ArrayLists to allocate more memory than they would potentially
4839         need in the Block class and MemberCache class. Setting the
4840         ArrayLists to construct with a capacity of 1 saves some
4841         memory. (56216kb->55585kb)
4842
4843 2007-12-27  Marek Safar  <marek.safar@gmail.com>
4844
4845         A fix for bug #347189 (2nd issue)
4846         * expression.cs (MemberAccess): Nested type can be found in base non-generic
4847         type.
4848
4849 2007-12-27  Miguel de Icaza  <miguel@novell.com>
4850         
4851         * report.cs: Do not use colors if stdout and stderr are not a
4852         terminal.
4853
4854 2007-12-27  Marek Safar  <marek.safar@gmail.com>
4855
4856         A fix for bug #346998
4857         * ecore.cs (MethodGroupExpr): Implemented override filter for generic
4858         overloads.
4859
4860 2007-12-27  Marek Safar  <marek.safar@gmail.com>
4861
4862         A fix for bug #343465
4863         * class.cs: Explicit method name for nested types uses dots only.
4864
4865 2007-12-27  Marek Safar  <marek.safar@gmail.com>
4866
4867         A fix for bug #343707
4868         * cs-tokenizer.cs: Advance line number for mixed CR/LF files correctly.
4869
4870 2007-12-27  Marek Safar  <marek.safar@gmail.com>
4871
4872         * ecore.cs: Report type inference errors only when arguments count matches
4873         parameter count.
4874         
4875         * generic.cs (NullCoalescingOperator): Cannot be applied to null.
4876         
4877         * expression.cs, report.cs: New warning.
4878         
4879         * typemanager.cs: Catch anonymous method type too.
4880
4881 2007-12-23  Marek Safar  <marek.safar@gmail.com>
4882
4883         A fix for bug #346379
4884         * expression.cs (UnaryMutator): Emit size of type for pointer mutator.
4885
4886 2007-12-23  Marek Safar  <marek.safar@gmail.com>
4887
4888         A fix for bug #347359
4889         * expression.cs (Invocation): Don't resolve already resolved expression.
4890
4891 2007-12-23  Marek Safar  <marek.safar@gmail.com>
4892
4893         A fix for bug #347189
4894         * class.cs (FixedField): Use non-dependent code only in the define phase.
4895
4896 2007-12-23  Marek Safar  <marek.safar@gmail.com>
4897
4898         A fix for bug #348076
4899         * ecore.cs (FieldExpr.DoResolve): Allow any variable based expression.
4900
4901 2007-12-22  Marek Safar  <marek.safar@gmail.com>
4902
4903         * ecore.cs (MethodGroupExpr.OverloadResolve): Set type arguments for
4904         discovered extension methods.
4905
4906 2007-12-22  Marek Safar  <marek.safar@gmail.com>
4907
4908         * ecore.cs, namespace.cs, expression.cs: Removed broken ResolveGeneric
4909         method.
4910
4911 2007-12-21  Miguel de Icaza  <miguel@novell.com>
4912
4913         * report.cs (ErrorMessage): Add support for using colors on
4914         terminals that support it. 
4915
4916 2007-12-21  Marek Safar  <marek.safar@gmail.com>
4917
4918         * ecore.cs: Use information about expanded params for error reporting.
4919
4920 2007-12-21  Marek Safar  <marek.safar@gmail.com>
4921
4922         * ecore.cs, generic.cs, delegate.cs: Refactoring of method overloading code
4923         and logic for params overloads.
4924         
4925 2007-12-15  Miguel de Icaza  <miguel@novell.com>
4926
4927         * generic.cs (NullCoalescingOperator.CloneTo): implement this one,
4928         as this is also created from the parser.  Fixes #349034
4929
4930 2007-12-12  Miguel de Icaza  <miguel@novell.com>
4931
4932         * statement.cs (Throw.CloneTo): it is valid to have empty
4933         expressions for throw. 
4934
4935 2007-12-03  Marek Safar  <marek.safar@gmail.com>
4936
4937         * cs-parser.jay: Set delegate constraint parsing region correctly.
4938
4939 2007-12-03  Marek Safar  <marek.safar@gmail.com>
4940
4941         A fix for bug #345467
4942         * typemanager.cs (IsEqual): Compare generic parameters position only.
4943         
4944 2007-11-28  Marek Safar  <marek.safar@gmail.com>
4945
4946         * expression.cs (BaseAccess): Type arguments can be null.
4947
4948 2007-11-27  Raja R Harinath  <harinath@gmail.com>
4949
4950         * statement.cs (Block.Resolve): Ensure flow-branching tree is
4951         consistent even when an error has occured.
4952         (Switch.Resolve): Likewise.
4953
4954 2007-11-22  Marek Safar  <marek.safar@gmail.com>
4955
4956         A fix for bug #334505
4957         * class.cs: Don't ignore InternalsVisibleTo attribute for internal
4958         overrides.
4959         
4960 2007-11-22  Marek Safar  <marek.safar@gmail.com>
4961
4962         * ecore.cs, typemanager.cs, delegate.cs, expression.cs: The first of 
4963         refactorings required to resolve extension methods correctly when mixing
4964         generics and non-generics members.
4965         
4966 2007-11-20  Marek Safar  <marek.safar@gmail.com>
4967
4968         A fix for bug #342584
4969         * convert.cs: Added not documented explicit IntPtr/UIntPtr to enum
4970         conversion.
4971         
4972 2007-11-19  Marek Safar  <marek.safar@gmail.com>
4973
4974         A fix for bug #342512
4975         * delegate.cs: Use delegate argument expression when is available. Don't
4976         emit virtual call when class is sealed.
4977         
4978 2007-11-16  Marek Safar  <marek.safar@gmail.com>
4979
4980         A fix for bug #325423
4981         * assign.cs (FieldInitializer): Use resolved expression for emit.
4982         
4983         * class.cs: Print less confusing error message.
4984         
4985 2007-11-16  Marek Safar  <marek.safar@gmail.com>
4986
4987         * cs-tokenizer.cs: Removed GMCS ifdefs.
4988         
4989         * rootcontext.cs, report.cs: Report unavailable gmcs features used by
4990         mcs.
4991         
4992         * cs-parser.jay: Disabled nullable check.
4993         
4994         * generic-mcs: Copied more generic stuff.
4995                 
4996 2007-11-16  Marek Safar  <marek.safar@gmail.com>
4997
4998         * gcs-parser.jay: Merged to cs-parser.jay.
4999         
5000         * generic.cs, typemanager.cs, cs-tokenizer.cs, linq.cs, Makefile
5001         * *.csproj, *.sources: Updated to use only jay parser file.
5002
5003 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5004
5005         * gcs-parser.jay: Added nullable and default expression feature checks.
5006         
5007 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5008
5009         * gcs-parser.jay, cs-parser.jay, class.cs: Unified parameters parsing, 
5010         it fixes many TODOs and hidden bugs.
5011         
5012         * expression: Removed duplicate error check.
5013
5014 2007-11-15  Marek Safar  <marek.safar@gmail.com>
5015
5016         * gcs-parser.jay, statement.cs, decl.cs, ecore.cs: Try to resolve an
5017         implicitly type local variable only when it is used in a declaration.
5018
5019 2007-11-15  Marek Safar  <marek.safar@gmail.com>
5020
5021         * attribute.cs: Use CS0612 for empty strings.
5022
5023 2007-11-14  Marek Safar  <marek.safar@gmail.com>
5024
5025         * lambda.cs, statement.cs: Contextual return may act as a statement.
5026
5027 2007-11-14  Marek Safar  <marek.safar@gmail.com>
5028
5029         A fix for a regression cause by #324222
5030         * class.cs: Don't report unused even when it implements an interface.
5031         
5032 2007-11-13  Marek Safar  <marek.safar@gmail.com>
5033
5034         A fix for bug #341205
5035         * ecore.cs, expression.cs: Method group expression cannot do static
5036         method access with an instance reference check before overloading takes
5037         a place.
5038         
5039 2007-11-13  Marek Safar  <marek.safar@gmail.com>
5040
5041         A fix for bug #325359
5042         * class.cs: Use predictable name for automatically generated property.
5043         
5044 2007-11-12  Marek Safar  <marek.safar@gmail.com>
5045
5046         A fix for bug #324996
5047         * expression.cs (Is): Handle case where D is nullable and T is not
5048         correctly.
5049         
5050         * generics.cs (Nullable.HasValue): Nullable HasValue expression.
5051         
5052 2007-11-12  Marek Safar  <marek.safar@gmail.com>
5053
5054         * generic.cs, literal.cs, ecore.cs, class.cs, delegate.cs, const.cs,
5055         anonymous.cs, expression.cs, attribute.cs, codegen.cs, statement.cs:
5056         Flush small error reporting changes.
5057         
5058 2007-11-09  Marek Safar  <marek.safar@gmail.com>
5059
5060         A fix for bug #324996
5061         * expression.cs: Rewrote Is expression implementation to work with
5062         generics, nullable types, anonymous method. A const result expression 
5063         uses existing infrastructure instead of custom not fully-featured one.
5064         
5065 2007-11-08  Marek Safar  <marek.safar@gmail.com>
5066
5067         A fix for bug #340202
5068         * class.cs: Consider generics for volatile field.
5069
5070 2007-11-08  Marek Safar  <marek.safar@gmail.com>
5071
5072         A fix for bug #335594
5073         * expression.cs: Use conversion rules when handling string addition.
5074         
5075 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5076
5077         A fix for bug #336651
5078         * expression.cs: Fixed a crash when probing is on.
5079         
5080 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5081
5082         A fix for bug #324242
5083         * covert.cs: Added a conversion from any nullable-type with an 
5084         underlying enum-type to the type System.Enum.
5085         
5086 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5087
5088         A fix for bug #324222
5089         * class.cs: Report all non-used event fields.
5090         
5091 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5092
5093         A fix for bug #325161
5094         * cs-parser.jay, gcs-parser.jay, decl.cs: Implemented namespace alias
5095         qualifier for generic types.
5096         
5097 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5098
5099         A fix for bug #322971
5100         * expression.cs, ecore.cs: Added intermediate result value check for
5101         indexers. 
5102         
5103 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5104
5105         A fix for bug #324754
5106         * cs-parser.jay, gcs-parser.jay, class.cs: Try to create an interator
5107         when it was requested.
5108
5109 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5110
5111         A fix for bug #325101
5112         * expression.cs: Do type not value comparison for `is' expression.
5113
5114 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5115
5116         A fix for bug #320236
5117         * convert.cs: Don't apply user conversion on underlying target type.
5118
5119 2007-11-06  Marek Safar  <marek.safar@gmail.com>
5120
5121         * expression.cs: Don't use unresolved expression for error reporting.
5122  
5123 2007-11-06  Marek Safar  <marek.safar@gmail.com>
5124
5125         A fix for bugs #337712, #324490
5126         * ecore.cs (MethodGroupExpr): Refactored to handle delegate method
5127         overloading resolution too.
5128         
5129         * delegate.cs: Uses MethodGroupExpr for overloading resolution. It makes
5130         the process consistent and more robust.
5131         
5132         * expression.cs, linq.cs, report.cs: Update.
5133
5134 2007-11-02  Marek Safar  <marek.safar@gmail.com>
5135
5136         A fix for bug #332909
5137         * attribute.cs: Resolve attributes in correct context using error
5138         handling procedure.
5139         
5140         * rootcontext.cs: Define Obsolete attribute members as core members.
5141         
5142 2007-11-02  Marek Safar  <marek.safar@gmail.com>
5143
5144         * statement.cs: Removed unused methods.
5145         
5146 2007-10-31  Wade Berrier  <wberrier@novell.com>
5147
5148         * Makefile:  reenable copy of gmcs.exe.config, but include it in EXTRA
5149         DIST (it doesn't get included because PROGRAM isn't defined to be gmcs
5150         during 'make dist')
5151
5152 2007-10-31  Marek Safar  <marek.safar@gmail.com>
5153
5154         A fix for bug #338102
5155         * decl.cs (CheckExistingMembersOverloads): Workaround issue with generic
5156         methods registered as non-generics.
5157         
5158 2007-10-31  Marek Safar  <marek.safar@gmail.com>
5159
5160         A fix for bugs #337712, #324490
5161         * delegate.cs: Delegate covariance and contravariance is not allowed for
5162         value types.
5163         
5164 2007-10-31  Marek Safar  <marek.safar@gmail.com>
5165
5166         A fix for bug #337719 
5167         * cs-tokenizer.cs: Restore identifier buffer when parsing contextual
5168         `from' keyword.
5169         
5170 2007-10-30  Marek Safar  <marek.safar@gmail.com>
5171  
5172         * Makefile (net_2_0_bootstrap/mcs.exe.config): Reverted copy gmcs.exe.config.
5173
5174 2007-10-29  Marek Safar  <marek.safar@gmail.com>
5175  
5176         * cs-tokenizer.cs, gcs-parser.jay, driver.cs: Fixed parsing of nested
5177         query expressions.
5178
5179 2007-10-29  Raja R Harinath  <rharinath@novell.com>
5180
5181         * Makefile (net_2_0_bootstrap/mcs.exe.config): Copy gmcs.exe.config.
5182
5183 2007-10-29  Marek Safar  <marek.safar@gmail.com>
5184  
5185         A fix for bug #334652
5186         * ecore.cs (MethodGroupExpr.OverloadResolve): Do also lookup for
5187         extension methods when we have not found the best candidate in normal
5188         container.
5189
5190 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5191
5192         * AssemblyInfo.cs: Keep up-to-date.
5193
5194 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5195
5196         * Makefile: Fixed generics compiler name.
5197         
5198 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5199
5200         * lambda.test: removed, lambda parsing is done differently.
5201         
5202         * gen-il.cs, gen-treedump.cs, old-code.cs : Obsolete.
5203
5204 2007-10-27  Gert Driesen  <drieseng@users.sourceforge.net>
5205
5206         * Makefile: Removed dependency on gmcs.exe.config. Fixes build.
5207
5208 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5209
5210         * Makefile, *.sources : All C# compilers are in mcs folder.
5211         
5212         * *.cs: Use existing 2_1 define for smcs.
5213
5214 2007-10-26  Marek Safar  <marek.safar@gmail.com>
5215
5216         A fix for bug #335847
5217         * assign.cs, expression.cs: Couple of changes to avoid creating a
5218         temporary variable for each object initializer assignment statement. It
5219         simplifies struct initialization too, otherwise two temporary variables
5220         would be required.
5221         Implemented optimization of redundant default element initializers.
5222         
5223 2007-10-25  Marek Safar  <marek.safar@gmail.com>
5224
5225         A fix for bug #336766
5226         * expression.cs (Class.CheckBase): Use generic name when method is
5227         generic.
5228         
5229 2007-10-25  Marek Safar  <marek.safar@gmail.com>
5230
5231         A fix for bug #334737
5232         * expression.cs (IndexerAccess.EmitAssign): Emit local temporary
5233         variable and not variable argument for prepared copies.
5234
5235 2007-10-24  Marek Safar  <marek.safar@gmail.com>
5236
5237         A fix for bug #325110
5238         * class.cs, expression.cs, attribute.cs: Use open generic method when
5239         checking conditional attribute.
5240         
5241 2007-10-24  Marek Safar  <marek.safar@gmail.com>
5242
5243         * report.cs, cs-tokenizer.cs, class.cs, cs-parser.jay, anonymous.cs, 
5244         expression.cs, statement.cs: Renamed method FeatureIsNotISO to
5245         FeatureIsNotAvailable.
5246
5247 2007-10-24  Marek Safar  <marek.safar@gmail.com>
5248
5249         ** C# 3.0 Partial methods
5250         
5251         * cs-tokenizer.cs, support.cs, class.cs, decl.cs: Implemented partial
5252         methods support. Because of member cache issue with generics only
5253         non-generics partial methods are fully supported.
5254         
5255 2007-10-23  Marek Safar  <marek.safar@gmail.com>
5256         
5257         * class.cs, decl.cs: Rewrote member overloads check to cope with 
5258         generics and to use member cache for member checking. It also improves
5259         performance and fixes remaining overloads issues.
5260         
5261 2007-10-20  Marek Safar  <marek.safar@gmail.com>
5262         
5263         * class.cs, const.cs, decl.cs, delegate.cs, enum.cs, generic.cs,
5264         roottypes.cs, typemanager.cs:
5265                 
5266         A member cache creation logic changed to add members immediately and
5267         not rely on fallback. The member cache is now only prefered way
5268         how to access and find type declaration members. It saves 5 MB of memory
5269         during MWF compilation and makes code ready for more optimizations and
5270         clean-ups, it's also a pre-requirement for partial methods.
5271         
5272 2007-10-18  Raja R Harinath  <harinath@gmail.com>
5273
5274         * ecore.cs (Expression.Error_ValueCannotBeConverted): Add special
5275         handling for generic parameters.
5276
5277 2007-10-15  Marek Safar  <marek.safar@gmail.com>
5278         
5279         * class.cs (FixedField): Removed redundant volatile check.
5280         
5281 2007-10-15  Marek Safar  <marek.safar@gmail.com>
5282         
5283         * class.cs, decl.cs: Fixed overload members verification to do only one
5284         check per possible collision.
5285         
5286 2007-10-13  Marek Safar  <marek.safar@gmail.com>
5287         
5288         A fix for bug #325478
5289         * anonymous.cs (AnonymousContainer.Compatible): Merge are flags together
5290         and create only one disposable flags container.
5291         
5292 2007-10-12  Marek Safar  <marek.safar@gmail.com>
5293         
5294         A fix for bug #332442 by Alexandre Gomes <alexmipego@gmail.com>
5295         * statement.cs (Fixed): Fixed variables cloning.
5296         
5297 2007-10-12  Marek Safar  <marek.safar@gmail.com>
5298         
5299         A fix for bug #333342
5300         * class.cs (EventField): Don't mark value type event as synchronized. 
5301         
5302 2007-10-12  Marek Safar  <marek.safar@gmail.com>
5303         
5304         * ecore.cs, anonymous.cs (MethodGroupExpr): Use score from type
5305         inference to identify best candidate method correctly.
5306         (ProperyExpr): A range variable is read only and cannot be modified.
5307         
5308 2007-10-11  Marek Safar  <marek.safar@gmail.com>
5309         
5310         * ecore.cs, delegate.cs (MethodGroupExpr): Refactored best candidate
5311         logic to identify best candidate method correctly.
5312         
5313 2007-10-11  Marek Safar  <marek.safar@gmail.com>
5314         
5315         * location.cs (Equals, GetHashCode): Removed.
5316         
5317 2007-10-11  Marek Safar  <marek.safar@gmail.com>
5318         
5319         * report.cs: Implemented message recorder. It is used mainly for lambda
5320         expressions to capture otherwise swallowed error messages.
5321         
5322         * anonymous.cs, lambda.cs.cs: Do full parameters check.
5323
5324         * ecore.cs (ExtensionMethodGroup): Report binding failure at the botton
5325         and not at the top.
5326         (MethodGroupExpr.DoResolve): Use message recorder for error handling.
5327                 
5328         * expression.cs (MemberAccess): Always report lookup failure.
5329         
5330         * location.cs: Implemented Equals, GetHashCode.
5331         
5332         * statement.cs (Return.DoResolve): Fixed hardcoded error argument.
5333         
5334 2007-10-10  Jb Evain  <jbevain@novell.com>
5335
5336         * codegen.cs: re-enable assembly version check.
5337
5338 2007-10-09  Marek Safar  <marek.safar@gmail.com>
5339         
5340         * report.cs, anonymous.cs, driver.cs, expression.cs: Added few ISO-2
5341         checks.
5342         
5343         * namespace.cs (UsingAlias): Do correct version check.
5344         
5345 2007-10-08  Marek Safar  <marek.safar@gmail.com>
5346         
5347         * expresison.cs, ecore.cs: Issue extension method error message when
5348         appropriate.
5349         
5350         * rootcontext.cs: Added ISO_2 compiler mode option.
5351
5352 2007-10-08  Marek Safar  <marek.safar@gmail.com>
5353         
5354         * expresison.cs (UnaryMutator.ResolveOperator): Print more useful error
5355          message.
5356         
5357 2007-10-08  Marek Safar  <marek.safar@gmail.com>
5358         
5359         * attribute.cs (GetString, GetBoolean): Work with both literal and
5360         constant.
5361         
5362         * ecore.cs, expresison.cs, delegate.cs (Invocation, MethodGroupExpr):
5363         Moved method overload specific methods to MethodGroupExpr.
5364         
5365         (IndexerAccess): Re-wrote resolving mechanism, fixed many issues and
5366         it should be less memory consuming.
5367         
5368 Mon Oct 8 09:29:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
5369
5370         * codegen.cs: remove the assembly version check until the buildbot is
5371         fixed.
5372
5373 2007-10-07  Jb Evain  <jbevain@novell.com>
5374
5375         * attribute.cs (Attribute.GetString): if the value
5376         expression is a StringConstant, return its string value.
5377
5378 2007-10-07  Jb Evain  <jbevain@novell.com>
5379
5380         * typemanager.cs: add `assembly_version_attribute_type`.
5381         * codegen.cs: on attribute emission, check that the
5382         AssemblyVersionAttribute doesn't overflow.
5383
5384 2007-10-05  Marek Safar  <marek.safar@gmail.com>
5385         
5386         A fix for bug #324677
5387         * anonymous.cs, decl.cs: Yes another anonymous container hack. Overwrite
5388         parent container of a scope container with currently resolved one. 
5389         
5390 2007-10-05  Marek Safar  <marek.safar@gmail.com>
5391         
5392         A fix for bug #325534
5393         * class.cs (Invocation.DoResolve): Check invocation of object finalizer
5394         only.
5395         
5396 2007-10-05  Marek Safar  <marek.safar@gmail.com>
5397         
5398         A fix for bug #327504
5399         * class.cs (Operator.Define): Refactored implicit and explicit user
5400         operator conversion rules.
5401         
5402 2007-10-05  Marek Safar  <marek.safar@gmail.com>
5403         
5404         A fix for bug #327520
5405         * ecore.cs (ExtensionMethodGroupExpr): Emit resolved extension argument.
5406         
5407 2007-10-04  Marek Safar  <marek.safar@gmail.com>
5408         
5409         A fix for bug #328022
5410         * class.cs (MethodData.Define): Use correct method to check whether
5411         a method implementents an accessor.
5412         
5413 2007-10-04  Marek Safar  <marek.safar@gmail.com>
5414         
5415         A fix for bug #330069
5416         * statement.cs (Fixed.Resolve): Read the first array element only when
5417         an array is instantiated. 
5418         
5419 2007-10-04  Marek Safar  <marek.safar@gmail.com>
5420         
5421         * expression.cs, assign.cs, generics.cs: Print correct operator when
5422         compound assignment is used.
5423         
5424 2007-10-04  Marek Safar  <marek.safar@gmail.com>
5425         
5426         A fix for bug #325841
5427         * expression.cs (ArrayAccess): Use full argument cloning only for
5428         string compound concatenation.
5429         
5430 2007-10-03  Marek Safar  <marek.safar@gmail.com>
5431         
5432         A fix for bug #328774
5433         * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
5434         assignment.
5435         (PropertyExpr.EmitAssign): Fixed string concatenation compound
5436         assignment.
5437
5438 2007-10-03  Raja R Harinath  <rharinath@novell.com>
5439
5440         Fix #328490
5441         * ecore.cs (SimpleName.DoSimpleNameResolve): Handle Property and
5442         Event accessibility checks here.  Remove some bogus code that
5443         accidently made GenericMethods work.
5444         (PropertyExpr.IsAccessibleFrom, EventExpr.IsAccessibleFrom): New.
5445
5446 2007-09-25  Marek Safar  <marek.safar@gmail.com>
5447         
5448         * expression.cs (ArrayCreation): Fixed cloning of an implicit types.
5449         
5450         * statement.cs (Block): Refactored AddVariable to allow error handling
5451         customization.
5452         
5453         * generic.cs: New stub.
5454         
5455 2007-09-23  Marek Safar  <marek.safar@gmail.com>
5456         
5457         * anonymous.cs, codegen.cs: Changed InferReturnType to be EmitContext
5458         flag.
5459         
5460 2007-09-17  Marek Safar  <marek.safar@gmail.com>
5461
5462         * class.cs: Use partial container to record whether any partial part
5463         contains static field initializer and therefore default contructor has
5464         to be defined.
5465         
5466 2007-09-14  Marek Safar  <marek.safar@gmail.com>
5467
5468         * class.cs (TypeContainer.AddPartial): Fixed an issue reported on
5469         mono-list when only one of two partial parts has defined accessibility
5470         modifier.
5471         
5472 2007-09-14  Marek Safar  <marek.safar@gmail.com>
5473
5474         A fix for bug #82845
5475         
5476         * class.cs (TypeContainer): Set correct resolve context for all field
5477         initializers.
5478         
5479 2007-09-13  Marek Safar  <marek.safar@gmail.com>
5480
5481         * assign.cs: Fixed a crash when field is resolved twice with an error.
5482         
5483         * codegen.cs: Changed InFieldInitializer to be flag.
5484         
5485         * anonymous.cs, ecore.cs, expression.cs: Update after
5486         IsInFieldInitializer rename.
5487         
5488         * const.cs: Removed unused parameter.
5489         
5490         * class.cs: Changed the way how we resolve and emit field initializers.
5491         The field initilizers have to have access to contructor block to emit
5492         compiler generated code.
5493
5494 2007-09-13  Marek Safar  <marek.safar@gmail.com>
5495
5496         * expression.cs (MemberAccess.DoResolve): DeclSpace is broken by
5497         generics use TypeContainer instead.
5498         
5499 2007-09-12  Marek Safar  <marek.safar@gmail.com>
5500         
5501         * generic.cs (TypeInferenceContext.InflateGenericArgument): Stub.
5502
5503         * lambda.cs (ResolveParameters): Use more powerful
5504         InflateGenericArgument.
5505         
5506         * parameters.cs: Better exception message.
5507                 
5508 2007-09-10  Marek Safar  <marek.safar@gmail.com>
5509
5510         * anonymous.cs (AnonymousMethodExpression.CompatibleChecks): Report
5511         correct expression block type. 
5512         
5513         * ecore.cs (Expression.Error_MemberLookupFailed): Made virtual.
5514         
5515         * expression.cs (Invocation): Extracted method group resolve to
5516         DoResolveOverload.
5517         
5518 2007-09-07  Marek Safar  <marek.safar@gmail.com>
5519
5520         * ecore.cs (Expression.MemberLookupFinal): Removed unused loc parameter.
5521         (MethodGroupExpr.ResolveGeneric): Use existing method group instance.
5522         
5523         * expression.cs (MemberAccess.DoResolve): Uses generic resolver for
5524         generic extension methods.
5525
5526 2007-09-06  Marek Safar  <marek.safar@gmail.com>
5527
5528         A fix for bug #82676 (Do I get it right now?)
5529         * convert.cs (Binary.ResolveOperator): An interface is converted to the
5530         object before a standard conversion is applied.
5531         
5532 2007-09-06  Marek Safar  <marek.safar@gmail.com>
5533
5534         * convert.cs (ImplicitReferenceConversionCore): Reverted wrong fix of
5535         #82676.
5536         
5537 2007-09-05  Marek Safar  <marek.safar@gmail.com>
5538
5539         A fix for bug #82676
5540         * convert.cs (ImplicitReferenceConversionCore): Check both sides for
5541         non-generic interface types.
5542         
5543 2007-09-05  Marek Safar  <marek.safar@gmail.com>
5544
5545         A fix for bug #82690
5546         * ecore.cs (PropertyExpr.EmitAssign): Leave a copy does just that.
5547         
5548 2007-09-05  Marek Safar  <marek.safar@gmail.com>
5549
5550         A fix for bug #82571
5551         * anonymous.cs (AnonymousMethod.DoCreateMethodHost): Use internal 
5552         modifier for container based methods.
5553         
5554 2007-09-05  Marek Safar  <marek.safar@gmail.com>
5555
5556         A fix for bug #82676
5557         * convert.cs (ImplicitReferenceConversionCore): From any class-type S to
5558         any interface-type T means to any of interface type T.
5559
5560 2007-09-04  Marek Safar  <marek.safar@gmail.com>
5561
5562         * namespace.cs: We have 2 versions of System.Core assembly.
5563
5564 2007-09-04  Marek Safar  <marek.safar@gmail.com>
5565
5566         A fix for bug #82652
5567         * class.cs (Class.GetClassBases): Compare types and not expressions.
5568
5569 2007-09-04  Marek Safar  <marek.safar@gmail.com>
5570
5571         A fix for bug #82620
5572         * expression.cs (Invocation.EmitArguments): Duplicate params arguments
5573         actually never worked before.
5574         (IndexerAccess): Emit prepared arguments before they are modified.
5575         
5576 2007-09-04  Marek Safar  <marek.safar@gmail.com>
5577
5578         A fix for bug #82563
5579         * assign.cs: Revert wrong fix.
5580         
5581         * expression.cs (VariableReference.EmitAssign): Handle ref reference
5582         correctly.
5583         (ArrayAccess): Changed the way we emit compound (prepared) assignments.
5584         Instead of ldelema/stdind we have to use temporary variables to handle
5585         cases like String.Concat (params string[]).
5586         
5587 2007-08-31  Marek Safar  <marek.safar@gmail.com>
5588
5589         * class.cs: EmitAttributes to Emit rename.
5590         
5591         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Parent can be
5592         null.
5593         (MemberCore.HasClsCompliantAttribute): Don't depend on 
5594         GetClsCompliantAttributeValue execution.
5595         
5596 2007-08-31  Marek Safar  <marek.safar@gmail.com>
5597
5598         * anonymous.cs: Use shorter type prefix.
5599         
5600         * ecore.cs (SimpleName.DoSimpleNameResolve): Use transparent identifiers
5601         when exist.
5602         
5603         * expression.cs (LocalVariableReference.DoResolveBase): Don't capture
5604         variables when probing is on.
5605         
5606         * statement.cs (LocaLInfo.Clone): Clone correctly resolved and 
5607         unresolved variables.
5608         (TopLevelBlock.GetTransparentIdentifier): Default implementation doesn't
5609         handle transparent identifiers.
5610         
5611 2007-08-26  Marek Safar  <marek.safar@gmail.com>
5612
5613         * attribute.cs (IsClsCompliant): Add nullable types test.
5614         
5615 2007-08-24  Atsushi Enomoto  <atsushi@ximian.com>
5616
5617         * doc.cs : catch other types of exception than XmlException to
5618           report CS1570. Fixed bug #82565.
5619
5620 2007-08-23  Marek Safar  <marek.safar@gmail.com>
5621
5622         * anonymous.cs (AnonymousMethodExpressin.ExplicitTypeInference): 
5623         The number of delegate parameters has to match.
5624         (AnonymousMethodExpressin.VerifyParameterCompatibility): Handles generic
5625         arrays.
5626
5627 2007-08-21  Marek Safar  <marek.safar@gmail.com>
5628
5629         * anonymous.cs (AnonymousMethod): Generate private anonymous method
5630         to fix problem with private arguments.
5631
5632 2007-08-20  Marek Safar  <marek.safar@gmail.com>
5633
5634         * anonymous.cs (AnonymousTypeClass): An anonymous type can be empty.
5635         
5636         * decl.cs (MemberName): Ignore generic type with no generic arguments. 
5637         
5638         * expression.cs (AnonymousTypeDeclaration): An anonymous type can be
5639         empty. Add cloning suport.
5640         
5641         * roottypes.cs (GetAnonymousType): Fixed argument comparison logic.
5642
5643 2007-08-20  Marek Safar  <marek.safar@gmail.com>
5644
5645         * convert.cs, ecore.cs, expression.cs, literal.cs: Use factory method 
5646         to create EmptyCast. It handles EmptyConstantCast specialization for
5647         constants.
5648         
5649 2007-08-18  Marek Safar  <marek.safar@gmail.com>
5650
5651         * expression.cs (Binary.is_unsigned): Handle unsafe types too.
5652         (EmitArrayArgument): One routine for array arguments.
5653         (ArrayCreation.MakeByteBlob): Fixed an array alignment. 
5654         
5655 2007-08-17  Marek Safar  <marek.safar@gmail.com>
5656
5657         * cs-tokenizer.cs (GetKeyword): Handle from keyword in a different way.
5658
5659 2007-08-17  Marek Safar  <marek.safar@gmail.com>
5660
5661         * anonymous.cs: MemberLookupFinal update.
5662
5663         * class.cs (ConstructorInitializer): Is expression based.
5664         
5665         * delegate.cs: MethodGroupExpr update.
5666         
5667         * ecore.cs  (Error_MemberLookupFailed): Improved to report better error
5668         messages.
5669         (Error_MemberLookupFailed): Customizable error override.
5670         (MethodGroupExpr): Keep queried type for later usage.
5671         (MethodGroupExpr.OverloadResolve): Catch errors related to overload
5672         resolve.
5673         
5674         * expression.cs: Error_MemberLookupFailed refactoring.
5675         (New.DoResolve): Resolve as much as possible.
5676         (ElementInitializer.Error_MemberLookupFailed): Object initializer
5677         customization for invalid member types.
5678
5679         * statement.cs: MethodGroupExpr update.
5680         
5681 2007-08-16  Marek Safar  <marek.safar@gmail.com>
5682
5683         * modifier.cs (Check): Check all modifiers and not only accessibility
5684         ones.
5685
5686 2007-08-16  Marek Safar  <marek.safar@gmail.com>
5687
5688         * ecore.cs (Expression.Error_ValueCannotBeConverted): Report always a
5689         type and not an expression.
5690
5691 2007-08-16  Marek Safar  <marek.safar@gmail.com>
5692
5693         * statement.cs (Catch.Clone): Type and variable can be null.
5694
5695 2007-08-16  Marek Safar  <marek.safar@gmail.com>
5696
5697         A fix for bug #81979
5698         * assign.cs (Assign.Emit): Prepare arguments for string concatenation.
5699         I am really not sure whether this is the best fix.
5700         
5701         * expression.cs (VariableReference.EmitAssign): Do prepare_load test
5702         only once.
5703         
5704 2007-08-14  Marek Safar  <marek.safar@gmail.com>
5705
5706         ** C# 3.0 Object and collection initializers (major re-write)
5707         
5708         * assign.cs (DoResolve): Initializers are not assign related.
5709         
5710         * codegen.cs (EmitContext.CurrentInitializerVariable): Holds a varible
5711         used during collection or object initialization.
5712         
5713         * expression.cs (Error_InvalidArguments): Add initializers specific
5714         messages. More will come later because it requires some general
5715         refactoring.
5716         (New.DoResolve): Better error handling for unsafe types.
5717         (EmptyExpressionStatement): New class.
5718         (ElementInitializer): An object initializer expression.
5719         (CollectionElementInitializer): A collection initializer expression.
5720         (CollectionOrObjectInitializers): A block of object or collection
5721         initializers.
5722         (NewInitialize): New expression with element/object initializers.
5723         
5724         * statement.cs: Reverted object/collection initializer hacks.
5725         
5726         * typemanager.cs (CSharpName): Filter __arglist type.
5727         
5728 2007-08-09  Marek Safar  <marek.safar@gmail.com>
5729
5730         ** C# 3.0 Anonymous Types (update to the latest standard)
5731         
5732         * expression.cs (Binary.ResolveOperator): Threat all null based types
5733         same.
5734         (AnonymousTypeDeclaration): Renamed from AnonymousType and simplified.
5735         (AnonymousTypeParameter): Updated.
5736         
5737         * anonymous.cs (CompilerGeneratedClass): Add custom name overload.
5738         (AnonymousTypeClass): New anonymous type container.
5739         
5740         * class.cs (AddField): Return operation result.
5741         
5742         * generic.cs: Another empty TypeArguments overload.
5743         
5744         * roottypes.cs (AddAnonymousType, GetAnonymousType): Anonymous types
5745         are stored at top of normal hierarchy.
5746         
5747         * typemanager.cs (CSharpName): Filter anonymous types.
5748         
5749 2007-08-09  Marek Safar  <marek.safar@gmail.com>
5750
5751         * expression.cs (StringConcat.Append): Handle 3 and more concatenation
5752         as single Concat call. How could we miss that :-(
5753         
5754 2007-08-08  Marek Safar  <marek.safar@gmail.com>
5755
5756         * expression.cs (ArrayCreation.CloneTo): Allocate exact size.
5757         
5758 2007-08-07  Miguel de Icaza  <miguel@novell.com>
5759
5760         * expression.cs: Fix the previous commit, the creation of the
5761         arguments array list needs also to be conditional on the arguments
5762         not being null.
5763
5764         * class.cs: Add a little bit of help to help narrow down problems.
5765
5766         * expression.cs (ArrayCreation.CloneTo): Argument can be null, do
5767         not try to copy in that case. 
5768
5769         * driver.cs: When building SMCS, include a new different set of
5770         default assemblies here.   Do this here so we can control whether
5771         to include the default assemblies with /noconfig.
5772
5773 2007-08-03  Marek Safar  <marek.safar@gmail.com>
5774
5775         A fix for bug #81979
5776         * expression.cs (TypeOf.GetAttributableValue): Check for type arguments
5777         only.
5778
5779 2007-08-03  Marek Safar  <marek.safar@gmail.com>
5780
5781         A fix for bug #82300
5782
5783         * anonymous.cs (AnonymousContainer.Define): Don't define anything when
5784         we are in probing scope.
5785
5786 2007-08-03  Marek Safar  <marek.safar@gmail.com>
5787
5788         A fix for bug #82301
5789
5790         * statement.cs (Catch.CloneTo): Clone blocks in the right order.
5791         (Statement.CloneTo): Clone and not map children blocks.
5792
5793 2007-08-03  Marek Safar  <marek.safar@gmail.com>
5794
5795         A fix for bug #82299
5796
5797         * expression.cs (LocalVariableReference.CloneTo): Remap local info
5798         variable too.
5799         
5800         * statement.cs (Statement.CloneTo): Clone variables before statements
5801         to allow remaping of local variables.
5802
5803 2007-08-03  Marek Safar  <marek.safar@gmail.com>
5804
5805         A fix for bug #82296
5806
5807         * anonymous.cs,
5808         * report.cs: Log crash details for future clone problems.
5809         
5810         * statement.cs (Return.Clone): Don't clone non-existent expression.
5811
5812 2007-08-03  Raja R Harinath  <harinath@gmail.com>
5813
5814         * class.cs (TypeContainer.AddBasesForPart): Make virtual.
5815         (Class.AddBasesForPart): Move CS0537 check here from ...
5816         * cs-parser.jay (class_declaration): ... here.  Move calling of
5817         'AddBasesForPart' to ...
5818         (class_bases): ... here.
5819         (struct_declaration, interface_declaration): Update to changes.
5820
5821 2007-08-02  Marek Safar  <marek.safar@gmail.com>
5822
5823         A fix for bug #81923
5824
5825         * statement.cs (Using.ResolveLocalVariableDecls): Only non-user implicit
5826         conversion is allowed.
5827
5828 2007-08-02  Marek Safar  <marek.safar@gmail.com>
5829
5830         A fix for bug #81564
5831
5832         * ecore.cs (EventExpr): Add IsBase handling.
5833
5834         * expression.cs (BaseAccess.CommonResolve): Events can use base accessor
5835         too.    
5836         
5837 2007-08-02  Raja R Harinath  <harinath@gmail.com>
5838
5839         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
5840         * cs-parser.jay: Some whitespace cleanups.
5841         (current_delegate): New.
5842         (type_name): New.
5843         (struct_declaration): Make similar to gmcs/cs-parser.jay -- add
5844         a dummy code block, and use 'type_name' instead of 'member_name'.
5845         (interface_declaration, class_declaration): Likewise.
5846         (delegate_declaration): Likewise.  Rearrange slightly and use
5847         'current_delegate'.
5848         * cs-tokenizer.cs (handle_where): Rename from handle_constraints.
5849         (GetKeyword): Update to change.  Use '!foo' instead of 'foo == false'.
5850
5851 2007-08-02  Marek Safar  <marek.safar@gmail.com>
5852
5853         A fix for bug #82039
5854
5855         * ecore.cs (TypeLookup.GetSignatureForError): Use name when type is not
5856         available.
5857
5858         * typemanager.cs (CSharpName): Split to string overload.
5859
5860 2007-08-02  Marek Safar  <marek.safar@gmail.com>
5861
5862         * expression.cs,
5863         * report.cs: Updated warning CS0472.
5864
5865 2007-08-01  Marek Safar  <marek.safar@gmail.com>
5866
5867         A fix for bug #82181
5868         * cs-parser.jay,
5869         * cs-tokenizer.cs: Ignore partial keyword inside block expression.
5870
5871 2007-08-01  Marek Safar  <marek.safar@gmail.com>
5872
5873         A fix for bug #82277
5874         * statememnt.cs (Block.Clone): Don't clone explicit blocks twice.
5875
5876 2007-08-01  Marek Safar  <marek.safar@gmail.com>
5877
5878         ** C# 3.0 Type Inference (major bits are working)
5879         
5880         * anonymous.cs (AnonymousMethodExpression): Removed refactored fields.
5881         (.ImplicitStandardConversionExists): Uses compatible.
5882         (.ExplicitTypeInference): Infers type arguments based on explicit arguments
5883         (.InferReturnType): New method.
5884         (.Compatible): Refactored.
5885         (.ResolveParameters): Uses factory to create resolved parameters.
5886         (.CompatibleMethod): Add probing mode support.
5887         (AnonymousContainer): Removed unused fields. Split Define and Resolve to
5888         clearly distinguish between 2 different operations.
5889         (LambdaMethod): Moved to lambda.cs.
5890         (AnonymousMethod): Removed unused fields and methods.
5891         (AnonymousDelegate): Simplified.
5892         
5893         * codegen.cs (ResolveTopBlock): Updated renamed Resolve to Define.
5894         
5895         * convert. cs (ImplicitConversionStandard): Compatible works differently.
5896         
5897         * delegate.cs (Delegate): New mehods to reduce code duplication.
5898         (.GetConstructor): New method.
5899         (.GetInvokeMethod): New method.
5900         (DelegateCreation): Updated.
5901         
5902         * ecore.cs (ResolveOverloadExtensions): Don't crash when extension method
5903         does not exist.
5904         (OverloadResolve): Made probing little bit faster.
5905         
5906         * expression.cs (ParameterReference.DoResolveLValue): Reference can be null
5907         when probing is on.
5908         
5909         * generic.cs (TypeInferenceContext): Dummy implementation.
5910         
5911         * iterators.cs: Updated after Resolve/Define rename.
5912         
5913         * lambda.cs (LambdaExpression)
5914         (.ResolveParameters): Handles both type of arguments and type inference too.
5915         
5916         * parameter.cs (ImplicitLambdaParameter.Resolve): Sanity check.
5917         (InflateTypes): Updated.
5918         
5919         * support.cs (InflateTypes): Changed signature and updated.
5920         
5921         * typemanager.cs (LookupMemberCache): Better dynamic type check.
5922         (MemberLookup_FindMembers): More MS tricks.
5923         (GetParameterData): Ditto.
5924         (GetDelegateParameters): Uses quick path for dynamic types.
5925         
5926 2007-08-01  Marek Safar  <marek.safar@gmail.com>
5927
5928         * class.cs (MethodData.Define): EmitContext is required for generic stuff
5929         only.
5930
5931 2007-07-31  Marek Safar  <marek.safar@gmail.com>
5932
5933         * statement.cs (ProcessParameters): Don't crash when parameters have wrong
5934         syntax.
5935         
5936 2007-07-26  Jb Evain  <jbevain@novell.com>
5937
5938         * typemanager.cs (TypeManager.GetConstructor): Add a method overload
5939         which takes a boolean 'report_errors', similar to the GetMethod.
5940         (InitCodeHelpers): StructLayoutAttribute.ctor(int16) is not visible
5941         in .net 2.1, do not report errors here.
5942
5943         * typemanager.cs (TypeManager.InitCoreTypes): System.ArgIterator,
5944         System.Runtime.CompilerServices.RequiredAttributeAttribute and
5945         System.Runtime.CompilerServices.TypeForwardedToAttribute are internal
5946         in .net 2.1.
5947
5948         * typemanager.cs (TypeManager.InitCoreTypes): Move the resolution
5949         of the type InternalsVisibleToAttribute before the first call
5950         to CoreLookupType which is allowed to fail (third boolean parameter
5951         to true). Because, during the resolution for a type that is not
5952         immediately found, we try to check if the type is not defined in
5953         a friend assembly, and to do so, we need the
5954         InternalVisibleToAttribute.
5955
5956 2007-07-23  Miguel de Icaza  <miguel@novell.com>
5957
5958         * expression.cs (Binary): Add support for the brain-dead CSC 2.x
5959         feature that allows structs to be compared against null and inline
5960         the result as true or false.
5961
5962         Notice that the same code is not permitted inside a generic block
5963         of code that would do:
5964
5965         class Foo<T> where T : struct {
5966             bool Eval (T x)
5967             {
5968                  return x == null;
5969             }
5970         }
5971
5972         It is only allowed if the type of T is not bound (no where
5973         clause).   In my opinion, this CSC 2 behavior is broken but people
5974         seem to be using it (IronRuby does, a few bug reports on bugzilla
5975         have it and some people have complained about it).
5976
5977         All of the users that depend on this behavior have code that is
5978         very likely broken. 
5979         
5980         * report.cs (Warning, Error): make these take object arguments,
5981         not strings, as that allows us to take advantage of Format.
5982
5983 2007-07-20  William Holmes  <billholmes54@gmail.com>
5984
5985         * decl.cs: Changed MemberName.CountTypeArguments to also check the 
5986           Left member variable for the Count.
5987         * doc.cs: Changed DocUtil.GetMethodDocCommentName to call 
5988           MemberName.CountTypeArguments to avoid a NRE. 
5989
5990         This code is contributed under the MIT X11 license
5991
5992 2007-07-18  Marek Safar  <marek.safar@gmail.com>
5993
5994         * cs-tokenizer.cs: Improved lambda parsing and removed old code.
5995
5996 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
5997
5998         * doc.cs : generic method arguments are written as ``x while generic
5999           type arguments are `x. Combined with the previous change, fixed bug
6000           #79706.
6001
6002 2007-07-18  Raja R Harinath  <rharinath@novell.com>
6003
6004         Fix #82120
6005         * expression.cs (Binary.ResolveOperator): When converting
6006         'a + (- b)' to 'a - b', ensure that the unary '-' is discarded.
6007
6008 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
6009
6010         * doc.cs : when T: or whatever x: is specified, it does not really
6011           check the doc comment's syntax correctness. Fixed bug #82006.
6012
6013 2007-07-18  Marek Safar  <marek.safar@gmail.com>
6014
6015         * anonymous.cs (AnonymouseMethodExpression): Refactored to work with
6016         LambdaExpression better.
6017         
6018         * cs-tokenizer.cs: Changed a way how we detect lambda parameters.
6019         
6020         * driver.cs (LambdaTypeParseTest): Removed, tested method is gone.
6021         
6022         * ecore.cs (Expression.MemberLookupFailed): Don't show currect context
6023         as it can be generated.
6024         
6025         * expression.cs (Invocation.Error_InvalidArguments): Show correct
6026         modifiers.
6027         
6028         * lambda.cs (LambdaExpression): Refactored to share same code with
6029         AnonymousMethodExpression.
6030         
6031 2007-07-17  Marek Safar  <marek.safar@gmail.com>
6032
6033         * anonymous.cs (MakeName): Include host name for easier debugging.
6034         (LambdaMethod): New class for lambda spcecific stuff.
6035         
6036         * attribute.cs: Set EmitContext return type.
6037
6038         * class.cs: Set EmitContext return type.
6039         
6040         * codegen.cs (EmitContext): Return type cannot be null to stop messing
6041         with null/void meaning.
6042         
6043         * iterators.cs (ContainerType): Implemented.
6044         
6045         * rootcontext.cs: Set value of TypeManager.bool_type at early stage.
6046         
6047         * statement.cs (Return): Updated to lambda expressions.
6048         (Block.CloneTo): Parent can be null.
6049                 
6050 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6051
6052         A fix for bug #81917
6053         * attribute.cs (AttributeTester.GetFixedBuffer): More robust testing.
6054         
6055         * class.cs (FixedField): Check whether field is in unsafe scope.
6056
6057         * ecore.cs (FieldExpr.DoResolve): Create fixed buffer expression here.
6058         (FieldExpr.Emit): Fixed buffers cannot be volatile.
6059
6060         * expression.cs (ElementAccess.Resolve): Move fixed buffers resolve to
6061         FieldExpr.
6062         
6063         * statement.cs (Fixed.Resolve): Simplified fixed buffers.
6064                 
6065 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6066
6067         * cs-tokenizer.cs, class.cs, decl.cs, driver.cs, namespace.cs,
6068         rootcontext.cs, expression.cs, statement.cs: Updated to use WarningLevel
6069         from Report class.
6070
6071 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6072
6073         * ecore.cs (FieldExpr.AddressOf): Less confusing warning message.
6074         
6075 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6076
6077         * anonymous.cs (AnonymousMethodExpression): Parameters are r/o.
6078         (AnonymousContainer.ResolveNoDefine): Another ec to aec flag conversion.
6079         
6080         * codegen.cs(EmitContext): Add ProbingMode flag.
6081         
6082         * delegate.cs (DelegateInvocation): Set few instance variables as r/o.
6083         
6084         * driver.cs: For now set both warning values.
6085         
6086         * ecore.cs (SimpleName): Name is readonly.
6087         (MethodGroup.OverloadResolve): One quick path for probing.
6088         
6089         * expression.cs (Unary): Set Oper r/o.
6090         (Binary): Set Oper r/o.
6091         (ParameterReference): Set few instance variables as r/o.
6092         (ParameterReference.DoResolveBase): Don't capture aruments when 
6093         the probing is on.
6094         (Invocation.CloneTo): Fixed typo, looks easy, yeah.
6095         (Arglist): arguments are private.
6096         (SizeOf): type is private and r/o.
6097         (MemberAccess): arguments are private.
6098
6099         * report.cs: Enhanced reporting on/off capabilities.
6100         
6101         * lambda.cs: Uses ec.IsInProbingMode.
6102         (ContextualReturn): Derives from return.
6103         
6104         * rootcontext.cs: For now set both warning values.
6105         
6106         * statement.cs (CloneContext.RemapBlockCopy): Remaps block to cloned
6107         copy if one exists.
6108         (Return.Resolve): Don't die immediately.
6109         (Block.Resolve): Speed-up probing.
6110         (Block.CloneTo): Clone only child blocks.
6111
6112 Fri Jul 13 11:19:28 CEST 2007 Paolo Molaro <lupus@ximian.com>
6113
6114         * iterators.cs: reverted Miguel's latest change (r81925) as it
6115         breaks the build in System.
6116
6117 2007-07-13  Miguel de Icaza  <miguel@novell.com>
6118
6119         * iterators.cs (Yield.CheckContext): Check for the iterator type
6120         also here as we can call into Yield even in codepaths that are not
6121         directly checked by
6122         (MethodOrOperator is the only path that was checked).
6123
6124         In addition to the standard check, use a more specific check for
6125         constructors to report a more verbose error. 
6126
6127 2007-07-12  Miguel de Icaza  <miguel@novell.com>
6128
6129         * ecore.cs (FieldExpr.AddressOf): Do not stop processing here,
6130         report the warning and continue 
6131
6132         * statement.cs (Using.EmitLocalVariableDecls): We were leaving
6133         values on the stack on the call to Emit.   Use EmitStatement if
6134         possible, or using Emit + Pop if not possible.   Fixes #82064
6135
6136 2007-07-12  Raja R Harinath  <rharinath@novell.com>
6137
6138         * expression.cs (Invocation.IsApplicable): Reorganize slightly to
6139         avoid try...finally in some cases.
6140
6141 2007-07-10  Marek Safar  <marek.safar@gmail.com>
6142
6143         * attribute.cs (Attribute.ResolveConstructor): Uses method group.
6144         
6145         * class.cs (ConstructorInitializer.Resolve): Use and keep method group
6146         instead of method. Re-use standard error handling.
6147         (ConstructorInitializer.Emit): Simplified.
6148         
6149         * delegate.cs: Updated after Invocation.EmitCall change.
6150         
6151         * ecore.cs (GetOperatorTrueOrFalse): Uses MethodGroupExpr only.
6152         (SimpleName.SimpleNameResolve): Set and reset in_transit flag correctly.
6153         (ExtensionMethodGroupExpr): Refactored to use same OverloadResolve
6154         method and don't permanently changing input arguments.
6155         (MethodGroupExpr): Introduced resolved best_candidate, when method group
6156         is resolved it has one of the candidates is the best one which is later
6157         used to emit. Removed a few unused method.
6158         (MethodGroupExpr.MakeUnionSet): Moved from Invocation, it belongs here.
6159
6160         * expression.cs (StaticCallExpr.MakeSimpleCall): Uses method group.
6161         (Binary.ResolveOperator): Ditto.
6162         (ConditionalLogicalOperator.DoResolve): Ditto.
6163         (Invocation): Uses method group.
6164         (Invocation.DoResolve): Simplified.
6165         (Invocation.EmitCall): Removed useless is_static.
6166         (Invocation.Emit): Delegate to method group.
6167         (Invocation.EmitStatement): Simplified.
6168         (New): Uses method group.
6169         (MemberAccess.DoResolve): Don't destroy original expression.
6170         
6171         * statement.cs (ForEach.Resolve): Use null for no method arguments.
6172         
6173 2007-07-04  Marek Safar  <marek.safar@gmail.com>
6174
6175         * ecore.cs (VarExpr.DoResolveLValue): More restriction checks.
6176         
6177         * anonymous.cs,
6178         * lambda.cs: Add custom error message type.
6179
6180 2007-07-03  Marek Safar  <marek.safar@gmail.com>
6181
6182         * lambda.cs: Simplified little bit.
6183         
6184         * parameter.cs: Introduced ImplicitLambdaParameter.
6185         (Parameters.CreateFullyResolved): New factory instead of ctor.
6186         
6187         * anonymous.cs,
6188         * class.cs,
6189         * delegate.cs: Updated parameter creation.
6190         
6191 2007-07-03  Marek Safar  <marek.safar@gmail.com>
6192
6193         *  ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
6194         arguments.
6195         
6196         * generic.cs: Synchronized with gmcs.
6197         
6198 2007-07-03  Marek Safar  <marek.safar@gmail.com>
6199
6200         * class.cs (Indexer): Check return type as soon as possible.
6201         
6202         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
6203         members too.
6204         
6205         * ecore.cs (VarExpr.DoResolveLValue): Set eclass value.
6206         
6207         * expression.cs (Invocation.Error_InvalidArguments): Show type only.
6208         
6209         * parameter.cs (Parameter): Use expression type when it is available.
6210         
6211         * support.cs (ReflectionParameters.ParameterDesc): Show an extension
6212         method modifier for the first parameter only.
6213
6214 2007-06-24  Marek Safar  <marek.safar@gmail.com>
6215
6216         A fix for bug #81938
6217         * typemanager.cs (ChangeType): Fixed couple of char conversions.
6218         
6219         * constant.cs: Tide up an exception message.
6220
6221 2007-06-22  Marek Safar  <marek.safar@gmail.com>
6222
6223         * ecore.cs (SimpleName.DoSimpleNameResolve): Better error reporting when
6224         an uninitialized variable is used.
6225         
6226         * expression.cs (LocalVariableReference.DoResolve): Ditto.
6227
6228 2007-06-22  Marek Safar  <marek.safar@gmail.com>
6229
6230         * ecore.cs (SimpleName.TypeOrNamespaceNotFound): Allow to override type
6231         not found error handling.
6232
6233         * expression.cs (ArrayCreation): Removed redundant fields and little bit
6234         simplified.
6235         (ArrayCreation.ResolveArrayElement): To be ready to customization.
6236         (ArrayCreation.DoResolve): Simplified.
6237         (ImplicitlyTypedArrayCreation.DoResolve): Implicitly typed arrays have
6238         its own resolve process.
6239         (ImplicitlyTypedArrayCreation.ResolveArrayElement): Conversion magic.
6240
6241 2007-06-20  Marek Safar  <marek.safar@gmail.com>
6242
6243         * namespace.cs (NamespaceEntry.Error_AmbiguousTypeReference): Print
6244         more error details.
6245         
6246 2007-06-20  Marek Safar  <marek.safar@gmail.com>
6247
6248         * cs-tokenizer.cs: Removed var related stuff.
6249         
6250         * ecore.cs (Expression.ResolveAsContextualType): Introduced new method.
6251         (VarExpr): Changed to derive from SimpleName. VarExpr now behaves as
6252         a type and a keyword at same time.
6253         
6254         * decl.cs (MembeName.GetTypeExpression): Create VarExpr when type name
6255         matches to "var".
6256         
6257         * expression.cs (ImplicitlyTypedArrayCreation): New empty class for
6258         implicitly typed arrays, more changes will follow.
6259         
6260         * statement.cs (LocalInfo.Resolve): Resolve type as contextual type.
6261         
6262 2007-06-19  Marek Safar  <marek.safar@gmail.com>
6263
6264         * ecore.cs (VarExpr): Removed Handled field.
6265         
6266         * statement.cs (Using.ResolveLocalVariableDecls): Refactored to use
6267         build-in assign functionality.
6268         (ForEach.Resolve): Removed all implicitly typed local variable code and
6269         simplified.
6270         (ArrayForeach.Resolve): Infer implicitly typed local variable here.
6271         (CollectionForeach.Resolve): Infer implicitly typed local variable here.
6272
6273 2007-06-18  Marek Safar  <marek.safar@gmail.com>
6274
6275         * assign.cs: Removed implicitly typed local variable check.
6276         
6277         * expression.cs (LocalVariableReference.DoResolve): Add check for self
6278         referencing implicitly typed local variable.
6279         (LocalVariableReference.DoResolveLValue): Infer implicitly typed local
6280         variable here.
6281         
6282         * statement.cs (Fixed): Removed unsupported implicitly typed local
6283         variable code.
6284
6285 2007-06-15  Marek Safar  <marek.safar@gmail.com>
6286
6287         * decl.cs (MemberName): Moved all Unbound stuff to parser.
6288
6289 2007-06-14  Marek Safar  <marek.safar@gmail.com>
6290
6291         A fix for bugs #81855 and #76274
6292         * attribute.cs (AttachTo): Always set owner for global attributes to
6293         prefined owner.
6294         
6295         * ecore.cs (Error_TypeDoesNotContainDefinition): A type location can be
6296         usefull too.
6297         
6298         * cs-parser.jay: Assembly and module attributes must precede all other
6299         elements except using clauses and extern alias declarations.
6300
6301 2007-06-13  Marek Safar  <marek.safar@gmail.com>
6302
6303         A fix for bug #81748
6304         * cs-tokenizer.cs,
6305         * expression.cs: More checks for non ISO-1 features.
6306
6307 2007-06-12  Marek Safar  <marek.safar@gmail.com>
6308
6309         A fix for bug #81807
6310         * statement.cs(Switch.TableSwitchEmit): Define null label when it's not
6311         present inside switch statement and it is required by nullable check.
6312
6313 2007-06-12  Marek Safar  <marek.safar@gmail.com>
6314
6315         A fix for bug #81840
6316         * ecore.cs (SimpleName.ResolveAsTypeStep): Look for non-generic type
6317         when type matching fails.
6318         
6319         * namespace.cs: Tiny error message change.
6320
6321 2007-06-12  Marek Safar  <marek.safar@gmail.com>
6322
6323         * decl.cs (CheckAbstractAndExtern): Moved to MemberCore for easier error
6324         reporting. Added automatic property check.
6325         
6326         * class.cs: Updated after CheckAbstractAndExtern relocation.
6327         (AEventPropertyAccessor.GetSignatureForError): Customized.
6328         
6329 2007-06-11  Marek Safar  <marek.safar@gmail.com>
6330
6331         * class.cs (DefineBaseTypes): Base type can be undefined.
6332         
6333         * ecore.cs (TypeLookup): Minor refactoring.
6334         (DoResolveAsTypeStep): Removed redundant check.
6335
6336         * namespace.cs (Lookup): Removed redundant check.
6337                 
6338         * rootcontext.cs (BootstrapCorlib_ResolveType): Uses normal 
6339         ResolveAsTypeTerminal step.
6340         (BootstrapCorlib_*): Simplified.
6341         (PopulateCoreType): Core types can be now external.
6342
6343 2007-06-07  Marek Safar  <marek.safar@gmail.com>
6344
6345         * anonymous.cs (VerifyExplicitParameterCompatibility): Add flag to do
6346          verification only.
6347          (InferTypeArguments): Infers anonymous expression type arguments.
6348          (Compatible): Split to Compatible and InferTypeArguments. 
6349         
6350         * lambda.cs: Updated.
6351
6352 2007-06-08  Marek Safar  <marek.safar@gmail.com>
6353
6354         * anonymous.cs (AnonymousContainer): Marked as compiler generated.
6355
6356 2007-06-07  Raja R Harinath  <harinath@gmail.com>
6357
6358         Fix #80477, cs0135-2.cs, cs0135-3.cs
6359         * statement.cs (ToplevelBlock.ProcessParameters): Add parameter
6360         names to the "known" variables list.
6361         (Block.CheckInvariantMeaningInBlock): Handle the fact the
6362         parameter names are also "known".
6363         (Block.CheckError136): Remove.
6364         (ExplicitBlock.CloneTo): New.  Set 'known_variables' in target to
6365         null.
6366
6367 2007-06-07  Marek Safar  <marek.safar@gmail.com>
6368
6369         * ecore.cs (MethodGroupExpr.OverloadResolve): Print full method definition.
6370
6371 2007-06-06  Marek Safar  <marek.safar@gmail.com>
6372
6373         * ecore.cs (SimpleName.Emit): Emitting unresolved simple name is
6374         internal error not an user error.
6375          
6376         * expression.cs (IsApplicable): Refactored to make debugging easier.
6377
6378         * support.cs: More tricks for non-mono runtimes.
6379         
6380         * typemanager.cs (CoreLookupType): Made public.
6381         (InitSystemCore): All linq specific stuff moved to linq.cs
6382
6383 2007-06-05  Marek Safar  <marek.safar@gmail.com>
6384
6385         * typemanager.cs (CSharpSignature): One more missing build-in types
6386         replacement.
6387         More tricks for non-mono runtime.
6388
6389 2007-06-05  Raja R Harinath  <harinath@gmail.com>
6390
6391         * statement.cs (Block.CheckError136_InParents): Remove.
6392         (Block.AddVariable): Use GetParameterInfo instead.
6393         (ToplevelBlock.ProcessArguments): Likewise.
6394
6395 2007-06-04  Raja R Harinath  <rharinath@novell.com>
6396
6397         * statement.cs (ToplevelBlock.CloneTo): New.  Copy over parameter
6398         information too.
6399         (ToplevelBlock.GetParameterInfo): Split out of ...
6400         (ToplevelBlock.GetParameterRefernce): ... this.
6401         (ToplevelBlock.ParameterMap): Remove.
6402         * expression.cs (ParameterReference): Update to use
6403         ToplevelParameterInfo.
6404
6405         * statement.cs (ToplevelBlock.ProcessParameters): Workaround some
6406         regression.
6407
6408         * flowanalysis.cs (FlowBranching.CheckOutParameters): Move ...
6409         * statement.cs (ToplevelBlock.CheckOutParameters): ... here.
6410
6411         * statement.cs (ToplevelBlock.ResolveMeta): Move CS0136 checks ...
6412         (ToplevelBlock.ProcessParameters) ... here.
6413         (ToplevelBlock..ctor): Invoke it.
6414
6415         * statement.cs (ToplevelBlock.ResolveMeta): Add sanity checks for
6416         new parameters.
6417
6418         * statement.cs (IKnownVariable): New interface.
6419         (LocalInfo): Implement it.
6420         (ToplevelParameterInfo): New class.
6421         (ExplicitBlock.AddKnownVariable): Use IKnownVariable.
6422         (ExplicitBlock.GetKnownVariable): Likewise.  Rename from
6423         GetKnownVariableInfo.
6424
6425 2007-06-03  Raja R Harinath  <harinath@gmail.com>
6426
6427         Partly speed up CS0136 error checks.
6428         * statement.cs (ExplicitBlock.GetKnownVariableInfo): Remove
6429         'recurse' parameter.
6430         (Block.DoCheckError136): Only check errors in parameters.  Move
6431         local variable checks ...
6432         (Block.AddVariable): ... here, and ...
6433         (ToplevelBlock.ResolveMeta): ... here.
6434
6435 2007-06-02  Raja R Harinath  <harinath@gmail.com>
6436
6437         * statement.cs (Block.IsChildOf): Remove.
6438
6439         * statement.cs (Statement.Clone): Move special case code ...
6440         (Block.CloneTo): ... here.
6441
6442 2007-05-29  Raja R Harinath  <rharinath@novell.com>
6443
6444         * statement.cs (ToplevelBlock.container): Remove field.  It's
6445         redundant with 'Parent'.
6446         (ToplevelBlock.ContainerBlock): Remove accessor.
6447         (ToplevelBlock..ctor): Update to changes.  Register anonymous
6448         child with parent here, ...
6449         * cs-parser.jay (end_anonymous): ... not here.  Don't modify
6450         current_block.
6451         (start_anonymous): Don't save current_block.
6452         (top_current_block): Remove.
6453
6454         * statement.cs (Block.Flags): Remove IsExplicit and IsToplevel flags.
6455         (Block.Resolve): Update to changes.
6456         (Block..ctor): Move setting of "correct" 'Toplevel'
6457         and 'Explicit' fields to ...
6458         (ExplicitBlock..ctor, ToplevelBlock..ctor): ... here.
6459
6460 2007-05-27  Raja R Harinath  <harinath@gmail.com>
6461
6462         Kill Block.Implicit
6463         * statement.cs (Block.Implicit): Remove.
6464         (Block): Update to changes.
6465         * flowanalysis.cs: Likewise.
6466
6467         Mildly speed up CheckInvariantMeaningInBlock
6468         * statement.cs (ExplicitBlock.AddKnownVariable): Move here from Block.
6469         Recursively call AddKnownVariable to all enclosing blocks.
6470         (ExplicitBlock.GetKnownVariableInfo): Move here from Block.
6471         Remove recursive calls.
6472         (Block): Update to changes.
6473
6474         New ExplicitBlock invariants
6475         * statement.cs (Block.Explicit): New field.  It points to the
6476         immediately enclosing non-implicit block.
6477         (Block..ctor): Maintain the invariant.
6478         * cs-parser.jay: Take advantage of invariant.
6479
6480         Introduce ExplicitBlock
6481         * statement.cs (ExplicitBlock): New.
6482         (ToplevelBlock): Derive from it.
6483         (Block.Flags.IsExplicit): Rename from '...Implicit' and invert
6484         sense of flag.
6485         (Block.Implicit): Update to changes.
6486         * cs-parser.jay: Update to changes.
6487
6488         Remove unused field
6489         * codegen.cs (EmitContext.IsLastStatement): Remove.
6490         * statement.cs (Block.DoEmit): Update to changes.
6491
6492 2007-05-25  Raja R Harinath  <rharinath@novell.com>
6493
6494         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
6495         modifying current_block directly.
6496
6497 2007-05-23  Scott Peterson  <lunchtimemama@gmail.com>
6498         
6499         * class.cs: Implemented automatic properties (C# 3.0)
6500           Thanks to Marek for the help.
6501
6502 2007-05-23  Raja R Harinath  <rharinath@novell.com>
6503
6504         * flowanalysis.cs (VariableInfo.SetAssigned): When noting a
6505         variable as assigned, note also that all its components are
6506         assigned too.
6507         (MyBitVector.SetRange): New.  Function to set multiple bits to true.
6508
6509 2007-05-19  Marek Safar  <marek.safar@gmail.com>
6510
6511         * anonymous.cs, class.cs: Emit Compiler generated attribute when
6512         member is marked as compiler generated.
6513         
6514         * decl.cs (MemberCore): Refactored ModFlags into property.
6515
6516         * modifiers.cs: Add new modifier (COMPILER_GENERATED).
6517         (Check): Check only accessibility modifiers.
6518
6519 2007-05-18  Raja R Harinath  <rharinath@novell.com>
6520
6521         Track all assignable slots in one bit array
6522         * statement.cs (ToplevelBlock.ParameterMap): Convert into array.
6523         (ToplevelBlock.ResolveMeta): Don't create a VariableMap.  Move
6524         logic from VariableMap constructor here.  Use the same 'offset'
6525         variable that's later used for computing offsets of local
6526         variables.
6527         * flowanalysis.cs (UsageVector.parameters): Remove.
6528         (UsageVector): Update to changes.
6529         (VariableMap): Remove.
6530
6531         Avoid creating ParameterMap in every block
6532         * statement.cs (Block.ParameterMap): Move ...
6533         (ToplevelBlock.ParameterMap): ... here.
6534         (ToplevelBlock.ResolveMeta): Create VariableMap for parameters
6535         only once.
6536         * flowanalysis.cs (FlowBranching.param_map): Remove.
6537         (FlowBranching.UsageVector): Update to changes.
6538         (FlowBranchingToplevel.CheckOutParameters): Likewise.
6539
6540         * statement.cs (Block.CloneTo): Clone Toplevel field too.
6541
6542         * expression.cs (ParameterReference): Distinguish between block
6543         where parameter was referenced and declared.
6544
6545 2007-05-18  Marek Safar  <marek.safar@gmail.com>
6546
6547         * flowanalysis.cs, statement.cs: Put back improved error handling.
6548
6549 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
6550         
6551         * assign.cs:
6552         * expression.cs:
6553           Imporved object and collection initialization (C# 3.0).
6554
6555 2007-05-15  Marek Safar  <marek.safar@gmail.com>
6556
6557         A fix for bug #81380
6558         * expression.cs (Is.DoResolve): Only value types have constant `is'
6559         behaviour.
6560
6561 2007-05-15  Raja R Harinath  <rharinath@novell.com>
6562
6563         * statement.cs (ToplevelBlock.child): Remove.
6564
6565 2007-05-15  Raja R Harinath  <harinath@gmail.com>
6566
6567         Rationalize ResolveMeta: refactoring
6568         (Block.ResolveMeta): Remove wrong or superfluous comments.  Carve
6569         out constant handling code into ...
6570         (Block.DoResolveConstants): ... this.
6571
6572         Rationalize ResolveMeta: kill local_map
6573         * statement.cs (Block.local_map, Block.LocalMap): Remove.
6574         (Block.AssignableSlots): New.
6575         (Block.ResolveMeta): Make protected.  Don't create a VariableMap
6576         for locals -- move code from VariableMap here.  Avoid unnecessary
6577         allocations.
6578         * flowanalysis.cs (FlowBranching.local_map): Remove.
6579         (FlowBranching..ctor): Use Block.AssignableSlots.
6580         (VariableMap): Remove unused constructors.
6581
6582 2007-05-11  Raja R Harinath  <rharinath@novell.com>
6583
6584         * Makefile [PROFILE=net_2_0_bootstrap]: Add special-case rules.
6585
6586 2007-05-11  Marek Safar  <marek.safar@gmail.com>
6587
6588         * typemanager.cs (IsFriendAssembly): Should not be called for building
6589         assembly.
6590
6591 2007-05-09  Marek Safar  <marek.safar@gmail.com>
6592
6593         * literal.cs (NullConstant): Print null in all cases.
6594         
6595         * expression.cs (Binary.ResolveOperator): Implemented delegate
6596          comparison based on C# 2.0 changes.
6597
6598 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
6599
6600         This code is contributed under the MIT X11 license
6601         
6602         The following enables support for several C# 3.0 language features:
6603         
6604         * cs-tokenizer.cs: Added support for the "var" keyword.
6605         
6606         * ecore.cs: Refactored TypeLookupExpression.DoResolveAsTypeStep().
6607           Added VarExpr class to facilitate type inferencing.
6608         
6609         * class.cs: Added IDictionary field AnonymousTypes to TypeContainer
6610           to support anonymous types.
6611         
6612         * assign.cs: Added support for type inferencing and initialization.
6613         
6614         * anonymous.cs: Added AnonymousClass class to enable anonymous types.
6615         
6616         * expression.cs: Added implicit array support to ArrayCreation.
6617           Added 5 types and 1 interface:
6618           
6619           IInitializable                Implementing classes can inject initializing
6620                                         statements after object instantiation.
6621           
6622           Initializer                   Stores data for object initialization.
6623           
6624           AnonymousType                 An expression for anonymous types.
6625           
6626           AnonymousTypeParameter        Stores data about an anonymous type's field.
6627           
6628           NewInitialize                 An expression for object initialization.
6629           
6630           CollectionInitialize          An expression for collection initialization.
6631         
6632         * statement.cs: Added "var" keyword support to the foreach, using, and fixed
6633           statements.
6634
6635 2007-05-06  Marek Safar  <marek.safar@gmail.com>
6636
6637         A fix for bug #81500
6638         * cs-tokenizer.cs: Add special handling for coalescing operator.
6639
6640 2007-05-06  Marek Safar  <marek.safar@gmail.com>
6641
6642         A fix for bug #81529
6643         * attribute.cs (GetAttributeUsage): AttributeUsage attribute inherits
6644         its value from base class until it is redefined.
6645
6646 2007-05-02  Raja R Harinath  <rharinath@novell.com>
6647
6648         Fix regression in cs0631-3.cs
6649         * cs-parser.jay (operator_declarator): Add opt_attributes to error
6650         fallback.  Make error fallback catch more cases.
6651
6652 2007-05-01  Miguel de Icaza  <miguel@novell.com>
6653
6654         * cs-parser.jay: Allow parameters in operator declarations to have
6655         attributes. 
6656
6657 2007-04-27  Miguel de Icaza  <miguel@novell.com>
6658
6659         * statement.cs (If.CloneTo): Only clone the FalseStatement if it
6660         exists. 
6661
6662         * lambda.cs (ContextualReturn.Resolve): An expression is valid
6663         inside the ContextualReturn, it does not have to be an
6664         ExpressionStatement. 
6665
6666 2007-04-24  Miguel de Icaza  <miguel@novell.com>
6667
6668         * lambda.cs (ContextualReturn.Resolve): if the return type is not
6669         set, set it.
6670
6671 2007-04-23  Miguel de Icaza  <miguel@novell.com>
6672
6673         * anonymous.cs (AnonymousContainer): split the virtual Resolve
6674         method in two methods: ResolveNoDefine and Resolve.
6675
6676         ResolveNoDefine will stop just after ResolveTopBlock has been
6677         called.   
6678
6679         Resolve will then continue by creating a method and issuing the
6680         call to method.Define ().
6681
6682         (AnonymousMethod): Split and implement the new Resolve and
6683         ResolveNoDefine as well.
6684
6685         * lambda.cs (LambdaExpression): Split the anonymous method
6686         resolution code into a separate routine (CoreCompatibilityTest)
6687         from DoCompatibleTest.
6688
6689         (LambdaExpression.TryBuild): New method, this method tries to
6690         build the LambdaExpression with the given set of types to be used
6691         as the types for the various parameters of the lambda expression. 
6692
6693         If the compilation succeed with the given types, the infered type
6694         of the Anonymous method is returned, otherwise null is returned.
6695
6696 2007-04-23  Marek Safar  <marek.safar@gmail.com>
6697
6698         A fix for bug #81414
6699         * delegate.cs: Better fix, moved ApplyAttributes from Define to Emit.
6700
6701 2007-04-22  Miguel de Icaza  <miguel@novell.com>
6702
6703         * cs-tokenizer.cs: Change various identifiers here from the
6704         camelCasing to the recommended Linux-like style for instance
6705         variables from the Coding Guidelines. 
6706
6707 2007-04-19  Martin Baulig  <martin@ximian.com>
6708
6709         * convert.cs
6710         (Convert.ImplicitReferenceConversionCore): Allow conversions from
6711         System.Enum to System.ValueType.
6712
6713 2007-04-13  Martin Baulig  <martin@ximian.com>
6714
6715         Rewrote implicit reference conversions.  We need to distinguish
6716         between implicit reference conversions (13.1.4) and implicit
6717         boxing conversions (13.1.5).
6718
6719         According to the spec, there's an an implicit conversion
6720         "From a one-dimensional array-type S[] to IList<T> and base
6721         interfaces of this interface, provided there is an implicit
6722         reference conversion from S to T."  Note that this does not
6723         include boxing conversions.
6724
6725         * convert.cs
6726         (Convert.ImplicitTypeParameterBoxingConversion): New method.
6727         (Convert.ImplicitReferenceConversion): Split into
6728         ImplicitReferenceConversionCore() and
6729         ImplicitBoxingConversionExist().
6730         (Convert.ImplicitReferenceConversionExists): Use the new
6731         ImplicitReferenceConversionCore() and ImplicitBoxingConversionExists().
6732
6733 2007-04-12  Martin Baulig  <martin@ximian.com>
6734
6735         * convert.cs (Convert.ImplicitReferenceConversion): Move the
6736         `TypeManager.null_type' checks up to the top of the method.
6737
6738 2007-04-11  Marek Safar  <marek.safar@gmail.com>
6739
6740         A fix for bug #81350
6741         * class.cs, decl.cs, ecore.cs, namespace.cs: The optimization for private
6742         extension methods.
6743
6744 2007-04-11  Martin Baulig  <martin@ximian.com>
6745
6746         * statement.cs (Foreach.CollectionForeach.ProbeCollectionType):
6747         Use `TypeManager.GetInterfaces(t)' rather than `t.GetInterfaces()'
6748         to make this work for generic classes; fixes #79561.
6749
6750 2007-04-11  Martin Baulig  <martin@ximian.com>
6751
6752         * expression.cs (As): Add support for nullable types; fixes #79371.
6753
6754 2007-04-11  Martin Baulig  <martin@ximian.com>
6755
6756         * doc.cs (DocUtil.GetSignatureForDoc): Don't crash if
6757         `type.FullName' is null; fixes #80243.
6758
6759 2007-04-11  Martin Baulig  <martin@ximian.com>
6760
6761         * expression.cs (Invocation.IsApplicable): Don't modify the method
6762         if type inference succeeded, but the method was not applicable.
6763         Fixes #81250.
6764
6765 2007-04-10  Marek Safar  <marek.safar@gmail.com>
6766
6767         A fix for bug #81324
6768         * namespace.cs (Namespace.LookupExtensionMethod): Always inspect both
6769         internal and external namespaces containers.
6770
6771 2007-04-10  Martin Baulig  <martin@ximian.com>
6772
6773         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Use
6774         TypeManager.DropGenericMethodArguments() so we also call
6775         IMethodData.SetMemberIsUsed() for generic methods.  Fixes #80357.
6776
6777 2007-04-10  Martin Baulig  <martin@ximian.com>
6778
6779         * iterators.cs (Iterator.CreateIterator): Don't crash if
6780         `method.ReturnType' is null.  This happens if something went wrong
6781         while resolving that typ (we already reported an error in this case).
6782
6783 2007-04-10  Martin Baulig  <martin@ximian.com>
6784
6785         * expression.cs (New.DoResolve): Don't call CheckComImport() on
6786         generic interfaces; report the CS0144 directly.
6787
6788 2007-04-10  Martin Baulig  <martin@ximian.com>
6789
6790         * ecore.cs (MemberExpr.ResolveMemberExpr): If `left' is a
6791         `TypeExpr', call ResolveAsTypeTerminal() on it; fixes #81180.
6792
6793 2007-04-10  Martin Baulig  <martin@ximian.com>
6794
6795         * expression.cs (New.DoEmitTypeParameter): Fix #81109.
6796
6797 2007-04-09  Raja R Harinath  <rharinath@novell.com>
6798
6799         A better fix
6800         * flowanalysis.cs (UsageVector.MergeChild): Handle child.Block == null.
6801         * statement.cs: Use KillFlowBranching only in ResolveUnreachable.
6802
6803         Fix #81338
6804         * statement.cs (For.Resolve): If resolution fails, use
6805         KillFlowBranching.
6806
6807 2007-04-08  Marek Safar  <marek.safar@gmail.com>
6808
6809         * anonymous.cs (MakeName): Make faster and zero-based.
6810         (VerifyExplicitParameterCompatibility): Back to mode where generic
6811         parameter is ignored.
6812         (AnonymousMethodMethod.Emit): Decorate method as compiler generated.
6813
6814         * class.cs (EmitType): Method can emit another new method.
6815
6816         * cs-tokenizer.cs (IsLinqEnabled): Fixes static cctor race.
6817
6818         * driver.cs: Updated.
6819
6820         * lambda.cs: Reuse predefined empty parameters.
6821
6822         * parameter.cs: Updated
6823
6824         * support.cs: Implemented InflateTypes.
6825
6826         * typemanager.cs (GetFullName): Don't use FullName as it can be null.
6827         (InitSystemCore): Introduced to isolate 3.0 dependencies.
6828
6829 2007-04-03  Martin Baulig  <martin@ximian.com>
6830
6831         Fix #80632.
6832
6833         * statement.cs (Foreach.CollectionForeach.TryType): Use a custom
6834         version of TypeManager.IsOverride() which also works with generic
6835         types.  
6836
6837 2007-04-03  Martin Baulig  <martin@ximian.com>
6838
6839         Fix #81044.
6840
6841         * convert.cs
6842         (Convert.ExplicitReferenceConversion): We need to cast when
6843         converting from IList<T> to S[].
6844
6845 2007-04-01  Marek Safar  <marek.safar@gmail.com>
6846
6847         * decl.cs (FindExtensionMethods): Consider all candidates with same name
6848         at this level.
6849         
6850         * expression.cs (MemberAccess.DoResolve): Cache resolved expression.
6851
6852 2007-03-31  Marek Safar  <marek.safar@gmail.com>
6853
6854         * anonymous.cs (AnonymousMethodExpression.Compatible): Handles both
6855         argument and return type inferring.
6856
6857         * codegen.cs (InferReturnType): Flag whether return can be inferred.
6858         (ReturnType): Turned to property.
6859
6860         * statement.cs (Return): Implemented return type inferring.
6861
6862         * support.cs (ReflectionParameters): Use local types if possible.
6863
6864 2007-03-30  Raja R Harinath  <rharinath@novell.com>
6865
6866         * flowanalysis.cs (FlowBranching.Reachability): Remove.
6867         (FlowBranching.UsageVector): Update to changes.
6868
6869         Prepare to kill 'Reachability'
6870         * flowanalysis.cs (UsageVector): Remove 'Reachability' from
6871         argument of constructor.
6872
6873 2007-03-29  Raja R Harinath  <rharinath@novell.com>
6874
6875         Prepare to kill 'Reachability'
6876         * flowanalysis.cs (UsageVector.is_unreachable): New.
6877         (UsageVector): Update to maintain 'is_unreachable' in parallel to
6878         'reachability', and verify they're consistent.
6879
6880         Fix #81121
6881         * expression.cs (New.EmitStatement): Handle type parameters here too.
6882
6883 2007-03-29  Martin Baulig  <martin@ximian.com>
6884
6885         Fix #79148.
6886
6887         * anonymous.cs
6888         (ScopeInfo.ctor): Use `Modifiers.PUBLIC' if we're a nested
6889         CompilerGeneratedClass.
6890         (ScopeInfo.EmitScopeInstance): Make this protected.
6891         (CapturedVariable.EmitInstance): Use `Ldarg_0' if
6892         `ec.CurrentAnonymousMethod.Scope == Scope'.
6893
6894         * statement.cs (Block.ScopeInfo): Make this a property.
6895
6896 2007-03-27  Raja R Harinath  <harinath@gmail.com>
6897
6898         Prepare to kill 'Reachability'
6899         * flowanalysis.cs (FlowBranching.Reachability): Make class private.
6900         (FlowBranching.UsageVector.Reachability): Remove property.
6901         (FlowBranching.UsageVector.IsUnreachable): New property.
6902         (FlowBranching.UsageVector.ResetBarrier): New.
6903         (FlowBranching.UsageVector, FlowBranchingLabeled): Update to changes.
6904         * codegen.cs, statement.cs: Update to changes.
6905
6906 2007-03-27  Martin Baulig  <martin@ximian.com>
6907
6908         Fix #81209.
6909
6910         * decl.cs
6911         (DeclSpace.LookupNestedTypeInHierarchy): Correctly handle nested
6912         generic types.
6913
6914 2007-03-26  Raja R Harinath  <rharinath@novell.com>
6915
6916         * flowanalysis.cs (FlowBranching.Reachability): Use a boolean
6917         instead of TriState.  Remove all mention of TriState.
6918
6919         * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
6920         replaced by a boolean.  Add boolean 'is_unreachable' field, check
6921         and maintain invariants.
6922
6923 2007-03-25  Marek Safar  <marek.safar@gmail.com>
6924
6925         * anonymous.cs: Restored checks disabled for uninflated anonymous methods.
6926
6927 2007-03-25  Marek Safar  <marek.safar@gmail.com>
6928
6929         * expression.cs: Stop using obsolete 2.0 opcodes.
6930
6931 2007-03-25  Marek Safar  <marek.safar@gmail.com>
6932
6933         * enum.cs (EnumMember.Define): Fixed regression and slowdown caused by
6934         one of the latests Martin's fixes.
6935
6936 2007-03-23  Miguel de Icaza  <miguel@novell.com>
6937
6938         * expression.cs: On BigEndian systems, swap the bytes, temporary
6939         solution until we get a new bitconverter class.
6940
6941 2007-03-23  Martin Baulig  <martin@ximian.com>
6942
6943         Fix #81158.
6944
6945         * decl.cs (MemberCache.AddMembers): Add generic methods both as
6946         "Method" and "Method`1".  Normally, a cache lookup is done on the
6947         "Method" form (ie. without the generic arity), but this one makes
6948         lookups on the full form work as well.
6949
6950 2007-03-22  Raja R Harinath  <rharinath@novell.com>
6951
6952         * flowanalysis.cs (Reachability): Reorganize slightly, and remove
6953         unused properties.
6954
6955 2007-03-20  Bill Holmes  <billholmes54@gmail.com>
6956         * class.cs: 
6957         Added 2 MemberCoreArrayList objects, ordered_explicit_member_list and
6958         ordered_member_list, to TypeBuilder to store members to be defined
6959         in the order they were parsed in.
6960         - ordered_explicit_member_list contains all properties indexers
6961           and methods that are defined as explicit implementation of an
6962           interface or base class.
6963         - ordered_member_list contains all properties indexers and methods
6964           that are not defined as explicit implementation of an interface
6965           or base class.
6966
6967         Removed MethodArrayList and IndexerArrayList from TypeBuilder.  The 
6968         functionality in these removed classes has been replaced with 
6969         ComputeIndexerName, EmitIndexerName, HasEqualss, HasGetHashCode, and 
6970         CheckEqualsAndGetHashCode members defined and called in the TypeBuilderClass.
6971
6972         Adding CheckForDuplications to PropertyBase.PropertyMethod and calls
6973         to CheckForDuplications inside GetMethod and SetMethod Define Method
6974         to handle method property and indexer name conflicts.
6975
6976         Fixes #79434
6977
6978         All code is contributed under the MIT/X11 license.
6979
6980 2007-03-20  Martin Baulig  <martin@ximian.com>
6981
6982         * class.cs (TypeContainer.Interfaces): Removed; they're now
6983         included in `TypeContainer.Types'.
6984
6985 2007-03-20  Martin Baulig  <martin@ximian.com>
6986
6987         Fix #77963, #80314 and #81019.  Added gtest-317, ..., gtest-320.
6988
6989         * class.cs (TypeContainer.CreateType): New public method.  This is
6990         now called before DefineType() to create the TypeBuilders.
6991         (TypeContainer.DefineType): Don't create the TypeBuilder here; it
6992         has already been created by CreateType().
6993         (TypeContainer.DefineTypeBuilder): Renamed into CreateTypeBuilder();
6994         don't resolve our base classes here; this has been moved into
6995         DefineBaseTypes().  We're now called from CreateType().
6996         (TypeContainer.DefineBaseTypes): New private method; resolve our
6997         base classes here.  We're now called from DefineType().
6998
6999         * rootcontext.cs
7000         (RootContext.ResolveTree): Call TypeContainer.CreateType() on all
7001         our types first to create all the TypeBuilders.  After that, call
7002         TypeContainer.DefineType() on all the types which'll resolve their
7003         base classes and setup the resolve order.
7004
7005 2007-03-20  Martin Baulig  <martin@ximian.com>
7006
7007         * class.cs (TypeContainer.Enums): Removed; they're now included in
7008         `TypeContainer.Types'.  
7009
7010 2007-03-20  Martin Baulig  <martin@ximian.com>
7011
7012         * class.cs
7013         (TypeContainer.DefineType): Don't call ResolveMembers() here.
7014         (TypeContainer.DoResolveMembers): Call DefineType() on our
7015         `compiler_generated' classes; moved here from DefineNestedTypes().
7016
7017         * rootcontext.cs
7018         (RootContext.ResolveTree): Call ResolveMembers() on all
7019         TypeContainer's in the `type_container_resolve_order'.
7020
7021 2007-03-19  Marek Safar  <marek.safar@gmail.com>
7022
7023         * class.cs: Use corlib to handle InternalMethodImplAttribute.
7024
7025 2007-03-17  Marek Safar  <marek.safar@gmail.com>
7026
7027         * class.cs (EventFieldAccessor.EmitMethod): Don't override existing
7028         implementation flags.
7029
7030 2007-03-17  Marek Safar  <marek.safar@gmail.com>
7031
7032         * class.cs: More optimizations for type parameters.
7033
7034 2007-03-15  Marek Safar  <marek.safar@gmail.com>
7035
7036         * anonymous.cs (AnomymousMethod): Can be now hosted in generic container.
7037
7038         * ecore.cs, parameter.cs: More common code for both corlibs.
7039
7040         * typemanager.cs (IsGenericMethod): Simplified.
7041
7042 2007-03-15  Raja R Harinath  <rharinath@novell.com>
7043
7044         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
7045         'returns'.
7046         * statement.cs, iterators.cs, lambda.cs: Update to changes.
7047
7048         * statement.cs (Lock.Resolve): Invoke 'ec.NeedReturnLabel'
7049         unconditionally.  Simplify explanation.
7050         (Try.Resolve, Using.Resolve): Likewise.
7051
7052 2007-03-15  Martin Baulig  <martin@ximian.com>
7053
7054         Fix #80731.
7055
7056         * decl.cs (DeclSpace): If we're a partial class, use our
7057         `PartialContainer's `TypeParameters' and `CurrentTypeParameters'.
7058
7059 2007-03-15  Raja R Harinath  <rharinath@novell.com>
7060
7061         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
7062         'throws'.
7063         (FlowBranching.UsageVector): Update to changes.
7064         (FlowBranching.MergeSiblings): Likewise.
7065         * statement.cs: Likewise.
7066
7067 2007-03-15  Martin Baulig  <martin@ximian.com>
7068
7069         Fix #79302.
7070
7071         * decl.cs
7072         (MemberCache): Added a special .ctor for type parameters.
7073
7074         * typemanager.cs
7075         (TypeManager.MemberLookup_FindMembers): `TypeParameter' now has a
7076         `MemberCache'.  
7077
7078 2007-03-09  Martin Baulig  <martin@ximian.com>
7079
7080         * enum.cs (Enum): Make this a TypeContainer.
7081         (EnumMember): Derive from `Const'.
7082
7083         * const.cs
7084         (Const.DoResolveValue): New protected virtual method; move most of
7085         the functionality of ResolveValue() here so we can override it in
7086         `EnumMember'.
7087         (Const.CreateConstantReference): Make this virtual.
7088
7089         * class.cs (Kind): Add `Kind.Enum'.
7090         (TypeContainer.Emit): Don't emit the enums here; they're already
7091         in the `RootContext.typecontainer_resolve_order'.
7092
7093         * rootcontext.cs (RootContext.EmitCode): Don't emit the enums
7094         here; they're already in the `typecontainer_resolve_order'.
7095
7096         * ecore.cs (EnumConstant.ConvertImplicitly): Add
7097         TypeManager.DropGenericTypeArguments().
7098
7099         * typemanager.cs
7100         (TypeManager.CSharpEnumValue): Add DropGenericTypeArguments().
7101         (TypeManager.IsEnumType): Likewise.
7102         (TypeManager.EnumToUnderlying): Likewise.
7103         (TypeManager.IsEqual): Add support for enums.
7104
7105 2007-03-12  Raja R Harinath  <rharinath@novell.com>
7106
7107         * typemanager.cs (InitCoreTypes) [NET_2_0]: Allow
7108         DefaultParameterValueAttribute to be undefined, say if System.dll
7109         is not referenced.
7110
7111 2007-03-11  Marek Safar  <marek.safar@gmail.com>
7112
7113         * ecore.cs, parameter.cs, typemanager.cs: Another gmcs fix to work with
7114         any mscorlib.
7115
7116 2007-03-10  Marek Safar  <marek.safar@gmail.com>
7117
7118         * class.cs, parameter.cs: Unified parameters verification.
7119
7120 2007-03-08  Martin Baulig  <martin@ximian.com>
7121
7122         * cs-parser.jay (constructor_header): Pass the location to the
7123         newly created TopLevelBlock.
7124
7125 2007-03-07  Martin Baulig  <martin@ximian.com>
7126
7127         * statement.cs (Block.Resolve): Don't crash on error; bug #80715.
7128
7129 2007-03-06  Miguel de Icaza  <miguel@novell.com>
7130
7131         * convert.cs (ExplicitReferenceConversionExists): Sync this method
7132         with the changes from David, fixes the build.
7133
7134 2007-03-05  David Mitchell  <dmitchell@logos.com>
7135
7136         * convert.cs: Implement From System.Collecitons.Generic.IList<T>
7137         and its base interfaces to a one-dimensional array type S[],
7138         provided there is an implicit or explicit reference conversion
7139         from S to T.
7140
7141 2007-03-03  Marek Safar  <marek.safar@gmail.com>
7142
7143         * cs-tokenizer.cs: Implemented basic linq grammar.
7144
7145         * driver.cs: Set linq lang version on demand.
7146
7147 2007-02-26  Marek Safar  <marek.safar@gmail.com>
7148
7149         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
7150
7151 2007-02-25  Marek Safar  <marek.safar@gmail.com>
7152
7153         * attribute.cs: Replaced DefinePInvoke in favor of S.R.E implementation
7154         (Fixes #80455)
7155
7156         * class.cs (InterfaceMemberBase): Share common `extern' modifier checks
7157         here.
7158         Check property and event extern attributes.
7159
7160         * codegen.cs (ModuleClass): HasDefaultCharSet when module defined global
7161         charset.
7162
7163 2007-02-24  Marek Safar  <marek.safar@gmail.com>
7164
7165         A fix for bug #80407
7166         * ecore.cs: Don't report ambiguity error when methods have same parent.
7167
7168 2007-02-23  Marek Safar  <marek.safar@gmail.com>
7169
7170         A fix for bug #80878
7171         * class.cs, cs-parser.jay: Event property can host anonymous methods.
7172
7173 2007-02-22  Marek Safar  <marek.safar@gmail.com>
7174
7175         * attribute.cs: Enable ExtensionAttribute presence test.
7176
7177 2007-02-22  Marek Safar  <marek.safar@gmail.com>
7178
7179         * class.cs: Warn about missing GetHashCode only when Equals is override.
7180
7181         * decl.cs: Check accessibility of type arguments.
7182
7183         * typemanager.cs: Correctly report nullable array.
7184
7185 2007-02-20  Marek Safar  <marek.safar@gmail.com>
7186
7187         * class.cs, report.cs: Capture more details when things go wrong.
7188
7189 2007-02-20  Marek Safar  <marek.safar@gmail.com>
7190
7191         A fix for bug #80650
7192         * cs-parser.jay: Anonymous container starts at constructor declaration
7193         and not at block beginning because it has to be usable in constructor
7194         initializer.
7195
7196         * statement.cs: Use context location and not block one for error reporting.
7197
7198 2007-02-18  Marek Safar  <marek.safar@gmail.com>
7199
7200         A fix for bug #78712
7201         * class.cs.cs, decl.cs, ecore.cs: LookupAnyGeneric inspects nested types
7202         too.
7203
7204 2007-02-18  Marek Safar  <marek.safar@gmail.com>
7205
7206         A fix for bug #80493 by Atsushi Enomoto
7207         * cs-parser.jay: Ignore invalid attribute target.
7208
7209 2007-02-18  Marek Safar  <marek.safar@gmail.com>
7210  
7211         * cs-tokenizer.cs: Ignore '\0' as white space character.
7212
7213 2007-02-17  Miguel de Icaza  <miguel@novell.com>
7214
7215         * cs-parser.jay: Add support for lambda expressions to the mcs
7216         compiler as well.
7217
7218         * lambda.cs: Only clone when we are probing, not on the final call
7219         (Compatible is the final call). 
7220
7221         * statement.cs (CloneContext): Introduce class to provide block
7222         remapping during clone.
7223
7224         All statements Clone themselves now.
7225
7226         (Clone): special handling for blocks, when we clone a block, we
7227         register the block inside this routine, as children of the block
7228         might trigger a lookup. 
7229         
7230         * expression.cs: Add support for CloneContext in all expressions. 
7231         
7232 2007-02-17  Marek Safar  <marek.safar@gmail.com>
7233  
7234         A fix for bug #80493
7235         * statement.cs: Report ambiguous warning when interfaces are not related.
7236
7237 2007-02-15  Marek Safar  <marek.safar@gmail.com>
7238
7239         C# 3.0 extension methods.
7240
7241         * attribute.cs (Error_MisusedExtensionAttribute): Extension attribute
7242         cannot be used directly.
7243
7244         * class.cs (Class.Emit): Emit extension attribute if any class method
7245         is extension method.
7246         (Method.Define): Add basic extension method validation conditions.
7247         (Method.Emit): Emit extension attribute for method.
7248
7249         * codegen.cs (AssemblyClass): Emit extension attribute if at least one
7250         extension method exists. Currently we follow same approach as Microsoft
7251         does, emit even if a method or a class are private but this can change
7252         later.
7253
7254         * cs-parser.jay: Add handling of `this' keyword in method parameters
7255         context.
7256
7257         * decl.cs (DeclSpace.IsStaticClass): New property.
7258         (MemberCache.FindExtensionMethods): Looks for extension methods with
7259         defined name and extension type.
7260
7261         * doc.cs: Updated after OverloadResolve changes.
7262
7263         * driver.cs: Add new soft reference to System.Core.dll.
7264
7265         * ecore.cs (MethodLookup): Can return only MethodGroupExpr.
7266         (ExtensionMethodGroupExpr): Represents group of extension methods.
7267
7268         * expression.cs (Invocation): Moved methods BetterConversion, MoreSpecific,
7269         BetterFunction, IsOverride, IsAncestralType, OverloadResolve
7270         to MethodGroupExpr and made non-static for easier customization.
7271         (Invocation.DoResolve): Add extension method lookup when no standard
7272         method was found.
7273         (MemberAccess.DoResolve): Try extension methods if no member exists.
7274
7275         * modifiers.cs: Add METHOD_EXTENSION modifier.
7276
7277         * namespace.cs (RegisterExtensionMethodClass): Register class namespace
7278         as well as candidate extension type.
7279         (ComputeNamespaces): When assembly constains extension methods registers
7280         them.
7281         (Namespace.RegisterExternalExtensionMethodClass): Register type for later
7282         extension method lookup.
7283         (Namespace.LookupExtensionMethod): Looks for extension method in this
7284         namespace.
7285         (NamespaceEntry.LookupExtensionMethod): Does extension methods lookup to
7286         find a method which matches name and extensionType.
7287
7288         * parameter.cs (Parameter): Add This modifer.
7289         (HasExtensionMethodModifier): New property.
7290         (Resolve): Add extension parameter check.
7291         (ModFlags): turned to property to exclude this modifier as it is not real
7292         parameter modifier.
7293         (Parameters): Implemented ExtensionMethodType and HasExtensionMethodType.
7294
7295         * support.cs (ParameterData): Add ExtensionMethodType.
7296         (ReflectionParameters): Implemented ExtensionMethodType interface property.
7297
7298         * typemanager.cs: Add type and ctor extension attribute type.
7299
7300 2007-02-15  Miguel de Icaza  <miguel@novell.com>
7301
7302         * report.cs (DisableErrors, EnableErrors): used to prevent error
7303         output when we are "trying" to compile various methods with
7304         different types. 
7305
7306         * ecore.cs (Expression): Add Clone method that calls the virtual
7307         CloneTo method.  The current CloneTo method in Expression throws
7308         an exception so we can track down all the places where this must
7309         be implemented (not using abstract, because that would be a lot of
7310         up-front-work before we can start testing the implementation
7311         idea). 
7312
7313         Important: we only need Clone capabilities for expressions created
7314         by the parser, as the expressions we will be cloning are
7315         expressions in the pre-resolved state.   This vastly simplifies
7316         the work required. 
7317         
7318         (SimpleName): Add CloneTo that does nothing.
7319         (EmptyCast): Add CloneTo.
7320         
7321         * expression.cs (Binary): Implement CloneTo.
7322         (Invocation.IsApplicable): Store the current ec in
7323         EmitContext.TempEc and restore it on return.  This is used so we
7324         do not have to sprinkle hundres of methods with an extra
7325         EmitContext, we know that the only user is the lambda expression
7326         ImplicitConversionExists code. 
7327         
7328         (Argument): Add Cloning capabilities.
7329         (LocalVariableReference, ParenthesizedExpression, Unary, Probe,
7330         Cast, Conditional, ArrayCreation, InvocationOrCast, Invocation,
7331         ArglistAccess, ArgList, TypeOf, SizeOf, CheckedExpr,
7332         UnCheckedExpr, ElementAccess, BaseAccess, BaseIndexerAccess,
7333         IndexerAccess): Add Clone capability.
7334
7335         (LocalVariableReference, This): TODO: needs cloned Block mapping.
7336
7337         (Argument): Add cloning capability.
7338
7339         * assign.cs (Assign): Implement CloneTo.
7340
7341         * anonymous.cs (ImplicitStandardConversionExists): Make virtual.
7342         
7343         * lambda.cs (ImplicitStandardConversionExists): Implement lambda
7344         version by calling Convert with the EmitContext (that we are
7345         currently storing in ec, this is not great, but will do for now,
7346         to avoid passing EmitContext parameters to hundreds of functions
7347         that do not need them now).
7348
7349         (SetExpression): Remove, it is not needed.
7350         
7351         (ContextualReturn): Implement CloneTo.
7352
7353         * statement.cs (Statement): Implement cloning infrastructure,
7354         similar to expressions.
7355
7356         (Block): Partial implementation of Clone for statements.
7357
7358         (Return): Implement clone.
7359         
7360         * constant.cs (Constant.CloneTo): New method, does nothing.
7361
7362         * codegen.cs (TempEc): Add a static EmitContext as a temporary
7363         solution, until we decide how to exactly do this.  
7364         
7365 2007-02-14  Marek Safar  <marek.safar@gmail.com>
7366  
7367         A fix for bug #80493
7368         * class.cs (FindOutBaseMethod): When the base accessor does not exist and
7369         a property is override we need to use second accessor.
7370
7371 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7372  
7373         A fix for bug #80418
7374         * attribute.cs, class.cs: Use correct calling conventions for pinvoke
7375         methods.
7376
7377 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7378
7379         Another fix for bug #80749
7380         * pending.cs: Abstract class has priority over interfaces.
7381
7382 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7383
7384         Another fix for bug #80749
7385         * pending.cs: Abstract class has priority over interfaces.
7386
7387 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7388
7389         Another fix for bug #80749
7390         * pending.cs: Abstract class has priority over interfaces.
7391
7392 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7393
7394         Another fix for bug #80749
7395         * pending.cs: Abstract class has priority over interfaces.
7396
7397 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7398
7399         * class.cs Better error message.
7400
7401         * driver.cs: Add shorter versions of -optimize option.
7402
7403 2007-02-13  Martin Baulig  <martin@ximian.com>
7404
7405         * class.cs (Constructor.Emit): Check the return value of
7406         ec.ResolveTopBlock() and return on error.
7407
7408 2007-02-13  Raja R Harinath  <rharinath@novell.com>
7409
7410         * ecore.cs (Error_InvalidExpressionStatement): Add a comma to error
7411         message to fix error message regression.
7412
7413 2007-02-12  Marek Safar  <marek.safar@gmail.com>
7414
7415         * delegate.cs: Delegate creation expression cannot be of Nullable type.
7416
7417 2007-02-12  Marek Safar  <marek.safar@gmail.com>
7418
7419         A fix for bug #80749
7420         * assign.cs (FieldInitializer): FieldInitializer has to keep track of
7421         its parent container.
7422
7423         * class.cs (DefineFieldInitializers): Each initializer can has different
7424         resolve context.
7425
7426         * const.cs: Updated.
7427
7428 2007-02-11  Miguel de Icaza  <miguel@novell.com>
7429
7430         * lambda.cs (LambdaExpression.Compatible): Remove some early code,
7431         now all the heavy lifting to check that embedded statements or
7432         expressions have the right form is done in the ContextualReturn.
7433
7434         (ContextualReturn): New class.  
7435
7436         * ecore.cs (Error_InvalidExpressionStatement): Make a helper
7437         method that can be invoked to report 201, so we do not replicate
7438         this everywhere.
7439
7440         * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
7441         
7442         * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
7443         treating tabs as spaces. 
7444
7445 2007-02-09  Marek Safar  <marek.safar@gmail.com>
7446
7447         A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
7448         * assign.cs: Use full implicit conversion for right side check.
7449
7450 2007-02-09  Marek Safar  <marek.safar@gmail.com>
7451
7452         * statement.cs (Switch): Switch over boolean type is not standardized.
7453
7454 2007-02-08  Marek Safar  <marek.safar@gmail.com>
7455
7456         A fix for bug #80755
7457         * decl.cs (FindBaseEvent): Don't use method cache for events.
7458
7459 2007-02-07  Marek Safar  <marek.safar@gmail.com>
7460
7461         * cs-parser.jay: Better syntax error handling.
7462
7463         * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
7464         instead of underlying type value.
7465
7466 2007-02-06  Marek Safar  <marek.safar@gmail.com>
7467
7468         * driver.cs: Check define identifier before is registered.
7469
7470         * namespace.cs: Use existing error message.
7471
7472         * report.cs: New warning.
7473
7474 2007-02-06  Marek Safar  <marek.safar@gmail.com>
7475
7476         A fix for bug #80742
7477         * expression.cs: Delegate Invoke method can be called directly.
7478
7479 2007-02-06  Marek Safar  <marek.safar@gmail.com>
7480
7481         A fix for bug #80676
7482         * class.cs (IsEntryPoint): The Main method can have params modifier.
7483
7484 2007-02-04  Miguel de Icaza  <miguel@novell.com>
7485
7486         * parameter.cs (Parameter, Parameters): Add Clone method.
7487
7488         * anonymous.cs (Compatible): Turn method into virtual method, so
7489         LambdaExpression can implement a different behavior.
7490
7491         (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
7492         out the basic checking here, so it can be used by
7493         LambdaExpressions.
7494         
7495         * lambda.cs: Introduce "Compatible" function that will do the
7496         heavy lifting.
7497
7498 2007-02-02  Marek Safar  <marek.safar@gmail.com>
7499
7500         * attribute.cs: Unified one error message.
7501
7502         * class.cs (Class): Use type attributes and not properties to test static
7503         class.
7504         (IsEntryPoint): Don's pass local variable.
7505
7506         * convert.cs: Removed duplicate check.
7507
7508         * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
7509
7510         * driver.cs: Don't crash when soft reference does not exist.
7511
7512         * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
7513         (UsingEntry): Removed redundant allocation.
7514
7515         * parameter.cs: Add fast path for type parameters.
7516
7517         * support.cs: Don't allocate attribute when it's not used.
7518
7519 2007-01-30  Miguel de Icaza  <miguel@novell.com>
7520
7521         * anonymous.cs
7522         (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
7523         this into a virtual method, so we can override it in LambdaExpression.
7524
7525         * driver.cs: Improve diagnostics in case of failure. 
7526
7527         * cs-tokenizer.cs: Instead of trying to parse a type and a name,
7528         write a function that is slightly more complex and that parses:
7529
7530         type identifier [, type identifier]* )
7531
7532         The old function would return incorrectly a OPEN_PARENS_LAMBDA for
7533         this expression:
7534
7535                 (canEmpty ? i >= 0 : i > 0)
7536
7537 2007-01-30  Raja R Harinath  <rharinath@novell.com>
7538
7539         * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
7540         exception on possibly valid code.
7541
7542 2007-01-29  Raja R Harinath  <rharinath@novell.com>
7543
7544         * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
7545         Push/PopPosition.
7546         (parse_opt_type_arguments): Remove.  It's almost the same as
7547         parse_less_than.
7548         (parse_namespace_or_typename): Use parse_less_than.
7549
7550 2007-01-28  Miguel de Icaza  <miguel@novell.com>
7551
7552         * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
7553         this bug took a few hours to find, because the state saved and
7554         restored by PushPosition and PopPosition was ignoring the state of
7555         parse_generic_less_than.
7556
7557         I can also now remove the handling of OP_LT and OP_GT, this solves
7558         the big mistery.
7559         
7560         * cs-tokenizer.cs: store the location for the ARROW token, we use
7561         that in the parser.
7562
7563         (PushPosition, PopPosition): save/restore also `current_token',
7564         restore `parse_generic_less_than' (was missing).
7565
7566         (parse_opt_type_arguments): use parse_type, not
7567         parse_namespace_or_typename to parse types.
7568
7569         * lambda.cs: Empty new file, will eventually have the lambda
7570         expression implementation.
7571
7572         * lambda.test: used to test the internal tokenizer. 
7573
7574         * report.cs (FeatureIsNotISO1): Rename from
7575         FeatureIsNotStandardized, because it was about the language level
7576         (1 vs 2) it was not about standarization.
7577
7578         (FeatureRequiresLINQ): New.
7579
7580         * support.cs (SeekableStreamReader): Only require that the reader
7581         is a TextReader, not a StreamReader, so we can plug StringReader. 
7582
7583         * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
7584         given position in the input stream the following tokens can be
7585         parsed as a type followed by an identifier.
7586
7587         (is_punct): after a '(' if parse_type_and_parameter returns true,
7588         then return a special token OPEN_PARENS_LAMBDA which is used to
7589         avoid reduce/reduce errors in the grammar for the
7590         lambda_expression rules.
7591
7592         (parse_type): implement a type parser inside the
7593         tokenizer, the parser only returns true or false depending on
7594         whether the input at a given position can be parsed as a type.
7595
7596         (peek_token): new method used during type parsing.
7597
7598 2007-01-28  Raja R Harinath  <rharinath@novell.com>
7599
7600         Fix #80531
7601         * anonymous.cs (ScopeInfo.InflateParameters): New.
7602         (AnonymousContainer.Resolve): Use it to redirect types of
7603         delegate parameters.
7604
7605 2007-01-27  Raja R Harinath  <rharinath@novell.com>
7606
7607         Fix #80530
7608         * expression.cs (Error_InvalidArguments): Don't use two different
7609         messages for CS1503.  Use ExtraInformation and
7610         SymbolRelatedToPreviousError instead.
7611
7612         Fix #80358
7613         * decl.cs (DeclSpace.initialize_type_params): Don't access
7614         'type_params' of a partial class directly.
7615
7616 2007-01-26  Miguel de Icaza  <miguel@novell.com>
7617
7618         * constant.cs: Removed a handful of out-of-range checks that were
7619         not necessary. 
7620
7621 2007-01-25  Marek Safar  <marek.safar@gmail.com>
7622
7623         * expression.cs (CheckUselessComparison): Add additional check for char
7624         constants.
7625
7626         * namespace.cs: Fixed typo.
7627
7628 2007-01-23  Miguel de Icaza  <miguel@novell.com>
7629
7630         * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
7631         gone, instead we inline the test, preventing the needless casts to
7632         longs, ulongs and doubles for the parameters, avoiding calls to
7633         methods that overchecked stuff, and instead inlined things
7634         nicely. 
7635
7636 2007-01-20  Marek Safar  <marek.safar@gmail.com>
7637
7638         * cs-parser.jay: Better parameter error handling.
7639
7640 2007-01-17  Marek Safar  <marek.safar@gmail.com>
7641
7642         A fix for bug #80368, #80522
7643         * expression.cs (ArrayCreation.only_constant_initializers): Indicates
7644         whether array initializer contains constants only.
7645         (ArrayCreation.Emit): Use better formula to decide when
7646         are array initializers for static initialization.
7647         (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
7648         have to emit even constants otherwise they are pre-initialized.
7649
7650 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
7651             Raja R Harinath  <rharinath@novell.com>
7652
7653         Fix emit order of 'get' vs. 'set'.
7654         * support.cs (Accessors): New.
7655         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
7656         Note the order in which accessors are declared in the source.
7657         * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
7658         Refactored from Property.Define and Indexer.Define.
7659         (PropertyBase.DefineAccessors): New helper that calls the above in
7660         appropriate order as noted by the parser.
7661         (Property.Define, Indexer.Define): Update to changes.
7662         (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
7663
7664 2007-01-17  Raja R Harinath  <rharinath@novell.com>
7665
7666         Fix cs0029-6.cs and gcs0029-2.cs (regression)
7667         * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
7668         there's an implicit conversion from the current type to the target
7669         type before converting the underlying constant.
7670
7671 2007-01-16  Marek Safar  <marek.safar@gmail.com>
7672
7673         * const.cs (ResolveValue): Updated after constant conversion was made more
7674         generic.
7675
7676         * constant.cs (GetAttributableValue): constant to object conversion is
7677         used for attributes only.
7678         (IntConstant.ConvertImplicitly): Moved from convert to be used in all
7679         constant conversions.
7680         (LongConstant.ConvertImplicitly): Ditto.
7681
7682         * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
7683         (ImplicitConversionStandard): Handle constant conversion as extra step.
7684         It solves the issue when constant conversion was called indirectly like
7685         inside array initializer and constant folding was skipped.
7686
7687         * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
7688         this change.
7689
7690         * statement.cs(ImplicitConversionStandard): Updated after constant
7691         conversion was made more generic.
7692
7693 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
7694
7695         * expression.cs (As.DoResolve): Use GenericConstraints instead of
7696         Constraints, solves the problem where the compiler incorrectly
7697         reported that a type parameter was not constrained to a class (Bug
7698         80518)
7699
7700 2007-01-14  Marek Habersack  <grendello@gmail.com>
7701
7702         * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
7703
7704 2007-01-14  Marek Safar  <marek.safar@gmail.com>
7705
7706         A fix for bug #80368
7707         * assign.cs (FieldInitializer): New class implements field
7708         initializer statement.
7709
7710         * attribute.cs: Update after FieldMember rename.
7711
7712         * class.cs (PropertyBasedMember): New common class for property based
7713         types.
7714         (InterfaceMemberBase): New base class for all members which can be used as
7715         an interface members.
7716         (MethodCore): Moved really common code to InterfaceMemberBase.
7717         (Method.Define): Equal and GetHasCode detection is relevant for methods
7718         only.
7719         (MethodData.Define): Don't assume that public event implements an
7720         interface automatically.
7721         (MethodData.DefineMethodBuilder): Issue an error even if only extern
7722         modifier is used.
7723         (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
7724         (FieldMember): Merged with FieldBase.
7725         (EventProperty.AEventPropertyAccessor): New specialization to check whether
7726         event extern modifier can be used.
7727         (EventField.EventFieldAccessor): Moved event field specific code here.
7728         (Event.AllowedModifiers): Even event can be extern.
7729         (Event.FindOutBaseMethod): New override specific to events.
7730         (Indexer.parameters): Reintroduce parameters because base class holds
7731         only properties common data.
7732         (Indexer.CheckForDuplications): Indexers are threated as methods so we
7733         need do extra parameters check.
7734
7735         * const.cs: Update after FieldMember rename.
7736
7737         * decl.cs (MemberCache.FindBaseEvent): New method.
7738
7739         * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
7740         to reflect that indexer is now derived from PropertyBased.
7741
7742         * ecore.cs (GetMemberType): Made public.
7743         (EventExpr.ResolveMemberAccess): Use right event cache and checks for
7744         obsolete event.
7745
7746         * flowanalysis.cs, statement.cs: Update after FieldMember rename.
7747         
7748         * typemanager.cs (CSharpSignature): Correctly print event accessors.
7749         (RegisterEvent): Removed.
7750         (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
7751         (GetPrivateFieldOfEvent): Renamed to GetEventField.
7752
7753 2007-01-11  Raja R Harinath  <rharinath@novell.com>
7754
7755         Fix #80249
7756         * statement.cs (CollectionForeach.TryType): Prefer generic
7757         GetEnumerator over non-generic variant.  Fix code to follow comments.
7758
7759 2007-01-09  Raja R Harinath  <rharinath@novell.com>
7760
7761         Fix #80446
7762         * support.cs (ReflectionParameter): Don't use an invalid index on
7763         the generic parameter data.
7764
7765 2007-01-08  Miguel de Icaza  <miguel@novell.com>
7766
7767         * driver.cs: Just add a tiny bit of infrastructure.
7768
7769 2007-01-02  Marek Safar  <marek.safar@gmail.com>
7770
7771         * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
7772         where field type is struct from current assembly.
7773         
7774         * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
7775         it is possible.
7776
7777 2007-01-02  Marek Safar  <marek.safar@gmail.com>
7778
7779         A fix for bug #80381
7780         * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
7781         the core types.
7782
7783         * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
7784         messages.
7785         (Namespace.LookupType): Always use core types from corlib when speficied.
7786
7787         * report.cs: A new warning.
7788
7789         * rootcontext.cs (BootstrapCorlib_ResolveInterface,
7790         BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
7791         (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
7792
7793         * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
7794         (InitCoreTypes): Set expression type of object_type and value_type
7795         immediately after lookup.
7796
7797 2007-01-01  Miguel de Icaza  <miguel@novell.com>
7798
7799         * cs-tokenizer.cs: Accept Pc class characters (Connector
7800         Punctuation) as valid identifiers.  Fixes #78259
7801
7802         * expression.cs (Invocation.DoResolve): Moved the check for the
7803         use of `this' for doing method calls to the Invocation resolution
7804         step, after overload resolution has taken place instead of doing
7805         the check at the low-level `This.DoResolve' level.
7806
7807         The `This.DoResolve'(appens before overload resolution, so it has
7808         no way of knowing if the method that will be called will be
7809         instace or static, triggering an erroneous report for cs0188 (Bug
7810         78113).
7811
7812         We now do the check for instance method invocations after we know
7813         what method will be called.
7814
7815         (This.CheckThisUsage): Move the actual use of this structure
7816         checking into its own method and expose it. 
7817
7818         * Everywhere that called Error_ValueCannotBeConverted: pass a new
7819         EmitContext.
7820
7821         Exceptions: Null.ConvertImplicitly,
7822         Constant.ImplicitConversionRequired as there are too many call
7823         sites for passing the ec. 
7824
7825         * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
7826         EmitContext, if the value is null, then we do not try to provide
7827         the extra information from the error (If a userdefined conversion
7828         exists, as UserDefinedConversion requires a non null-EmitContext).
7829
7830         Fixes: #80347
7831
7832 2006-12-30  Raja R Harinath  <rharinath@novell.com>
7833
7834         * flowanalysis.cs (MyBitVector): Document some invariants.
7835         (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
7836         introduced below, and add a couple of others, 
7837
7838 2006-12-30  Marek Safar  <marek.safar@gmail.com>
7839
7840         * attribute.cs (GetMethodObsoleteAttribute): Uses new
7841         GetPropertyFromAccessor and GetEventFromAccessor.
7842         
7843         * class.cs (MethodCore.CheckBase): A new warning when obsolete member
7844         overrides non-obsolete one.
7845         (Indexer.Define): Error message has been moved to the parser.
7846
7847         * cs-parser.jay: Better syntax errors handling.
7848
7849         * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
7850         when an invocation has no arguments.
7851
7852         * ecore.cs: Removed not used caching.
7853
7854         * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
7855         implementation.
7856
7857         * report.cs: Add a new warning.
7858
7859         * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
7860
7861         * typemanager.cs (enumeration_type): Removed.
7862         (CSharpSignature): Reuses IsSpecialMethod.
7863         (IsEqual): Hack for MS BCL.
7864         (GetPropertyFromAccessor): New method.
7865         (GetEventFromAccessor): New method.
7866         (IsSpecialMethod): Fixed to handle more cases.
7867
7868 2006-12-30  Marek Safar  <marek.safar@gmail.com>
7869
7870         * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
7871         Made white spaces array static.
7872
7873         * ecore.cs (RemoveGenericArity): Optimized.
7874
7875         * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
7876         10 times faster).
7877         (MyBitVector.initialize_vector): Simplified.
7878
7879 2006-12-22  Miguel de Icaza  <miguel@novell.com>
7880
7881         * ecore.cs: Am not entirely happy with this hack, but it seems to
7882         address the issue in 80257 (a small test case for
7883         CreativeDocs.NET). 
7884
7885         I set the MethodGroupExpr.Type to an internal compiler type
7886         (itself in this case) to force the resolution to take place.   Why
7887         it does not take place with a null is beyond me.
7888
7889 2006-12-20  Marek Safar  <marek.safar@gmail.com>
7890
7891         A fix for bug #80288
7892         * expression.cs (ResolveOperator): Consider user defined conversion for
7893         logical and operator too.
7894         (EmitBranchable): Optimization for logical and when full constant folding
7895         could not be applied but one operand is constant.
7896
7897 2006-12-19  Marek Safar  <marek.safar@gmail.com>
7898
7899         * class.cs (GetClassBases): Write 5 times every day, will never use
7900         FullName for error reporting.
7901
7902         * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
7903
7904 2006-12-19  Martin Baulig  <martin@ximian.com>
7905
7906         * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
7907         the symbol file info here.
7908
7909 2006-12-18  Marek Safar  <marek.safar@gmail.com>
7910
7911         * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
7912         of `elseif' is taking then following sections are not taking.
7913         Fixes an issue reported on mono mailing list.
7914
7915 2006-12-18  Marek Safar  <marek.safar@gmail.com>
7916
7917         A fix for bug #80300
7918         * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
7919         a caller is not taking.
7920
7921 2006-12-18  Raja R Harinath  <rharinath@novell.com>
7922
7923         * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
7924         (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
7925         (RootScopeInfo, AnonymousMethodMethod): Update to changes.
7926         * iterator.cs: Change several TypeContainer declarations to DeclSpace.
7927         * class.cs: Update to changes.
7928
7929 2006-12-17  Marek Safar  <marek.safar@gmail.com>
7930
7931         A fix for bug #79934
7932         * anonymous.cs (CompilerGeneratedClass): Register class in a shared
7933         partial container.
7934
7935         * class.cs (ResolveMembers): Register an iterator in current container and
7936         not in shared one.
7937
7938 2006-12-16  Raja R Harinath  <rharinath@novell.com>
7939
7940         Fix test-543.cs
7941         * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
7942         satisfy a params annotated parameter.
7943
7944 2006-12-16  Marek Safar  <marek.safar@gmail.com>
7945
7946         A fix for bug #77014
7947         * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
7948         paramters correctly and not rely on hacks in Parameters class.
7949         (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
7950         at any possition.
7951         (Invocation.VerifyArgumentsCompat): Ditto.
7952         (Invocation.EmitArguments): Changed to correctly emit params arguments at
7953         any possition.
7954
7955         * parameter.cs (HasParams): Don't assume that params is the last one.
7956
7957         * support.cs (ReflectionParameters.ctor): Look for params attribute
7958         correctly.
7959         (ReflectionParameters.ParameterType): Removed hack when we returned last
7960         parameter for out of range parameters.
7961         (ParameterName, ParameterModifier): Ditto.
7962
7963 2006-12-14  Marek Safar  <marek.safar@gmail.com>
7964
7965         A fix for bug #79987
7966         * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
7967         when assembly is not CLS compliant but type is. I have no idea why is this
7968         allowed.
7969
7970         * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
7971
7972 2006-12-13  Miguel de Icaza  <miguel@novell.com>
7973
7974         * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
7975         in struct constructors, they are basically no-ops.
7976
7977 2006-12-12  Marek Safar  <marek.safar@gmail.com>
7978
7979         * cs-tokenizer.cs (Position): Save preprocessor status too.
7980
7981 2006-12-12  Marek Safar  <marek.safar@gmail.com>
7982
7983         A fix for bug #77794
7984         * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
7985
7986 2006-12-12  Marek Safar  <marek.safar@gmail.com>
7987
7988         * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
7989         Fixes #69299.
7990         (pp_expr): Report error for an invalid expression.
7991         (handle_preprocessing_directive): Simplified; add more error checking.
7992
7993 2006-12-11  Marek Safar  <marek.safar@gmail.com>
7994
7995         A fix for bug #74939
7996         * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
7997         directives handling.
7998
7999 2006-12-10  Marek Safar  <marek.safar@gmail.com>
8000
8001         A fix for bugs #80093, and #75984
8002         * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
8003         logic, it seems to me as it worked before "by coincidence".
8004         (xtoken): Simplified to use reworked handle_preprocessing_directive.
8005         (cleanup): Enabled endif check.
8006
8007 2006-12-09  Marek Safar  <marek.safar@gmail.com>
8008
8009         A fix for bug #80162
8010         * statement.cs (CollectionForeach.TryType): Generics and non-generics
8011         enumerators are never ambiguous.
8012
8013 2006-12-08  Raja R Harinath  <rharinath@novell.com>
8014
8015         Fix #80060
8016         * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
8017
8018 2006-12-06  Marek Safar  <marek.safar@gmail.com>
8019
8020         A fix for bug #80144
8021         * class.cs (EventProperty.Define): Explicit implementation means
8022         that an even is used.
8023
8024 2006-12-06  Marek Safar  <marek.safar@gmail.com>
8025
8026         Fixes the operators implementation (part II)
8027
8028         * cfold.cs (DoConstantNumericPromotions): Renamed to
8029         DoBinaryNumericPromotions and simplified.
8030         (BinaryFold): Couple of conversion fixes; simplified.
8031
8032         * constant.cs, ecore.cs, literal.cs
8033         (ToType): Renamed to ConvertImplicitly.
8034         (Reduce): Renamed to ConvertExplicitly.
8035
8036         * class.cs, convert.cs: Updated.
8037
8038         * expression.cs: TryReduce doesn't throw an exception.
8039
8040 2006-12-01  Marek Safar  <marek.safar@gmail.com>
8041
8042         A fix for bug #80108
8043         * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
8044         compatible.
8045
8046 2006-11-30  Marek Safar  <marek.safar@gmail.com>
8047
8048         Fixes unary operators implementation (part I)
8049         Also fixes #80026
8050
8051         * cfold.cs (Error_CompileTimeOverflow): Made internal
8052
8053         * const.cs (IConstant): Changed to use reference to constant and
8054         not constant itself.
8055         Updated IConstant implementations.
8056
8057         * constant.cs (CreateConstant): New factory method.
8058         Updated IConstant implementation.
8059
8060         * convert.cs (ImplicitStandardConversionExists): Uses compiler Equals.
8061
8062         * ecore.cs: Updated to use CreateConstantReference.
8063
8064         * enum.cs: Reflects IConstant changes.
8065
8066         * expression.cs (Unary): Reimplemented +,-,~ to conform C# standard.
8067
8068         * literal.cs (NullConstant): Change to be independently usable.
8069
8070 2006-11-29  Martin Baulig  <martin@ximian.com>
8071
8072         * class.cs (Constructor.Emit): Correctly handle anonymous methods;
8073         we need to emit the scope initializer before calling the base .ctor.
8074
8075         * anonymous.cs: Merged back from the new anonymous methods branch.
8076         (AnonymousMethodHost): Renamed to `RootScopeInfo'.
8077
8078         * expression.cs (ParameterReference.DoResolveBase): Create a
8079         "normal" ScopeInfo when capturing parameters rather than using the
8080         root scope; this makes things work with anonymous methods having
8081         parameters.
8082
8083         * statement.cs
8084         (ToplevelBlock.AnonymousMethodHost): Renamed into `RootScope'.
8085
8086 2006-11-22  Marek Safar  <marek.safar@gmail.com>
8087
8088         A fix for bug #79987
8089         * class.cs (VerifyClsCompliance): Move redundant CLS compliance attribute
8090         check to a base class.
8091         * decl.cs (VerifyClsCompliance): Warn that CLS compliance cannot be tested
8092         only when assembly has missing attribute.
8093         * report.cs: Update.
8094
8095 2006-11-21  Marek Safar  <marek.safar@gmail.com>
8096
8097         * cs-tokenizer.cs: Merged with gmcs version.
8098
8099 2006-11-20  Marek Safar  <marek.safar@gmail.com>
8100
8101         * cs-tokenizer.cs,
8102         * cs-parser.jay: Better error message when partial keyword is misplaced.
8103
8104 2006-11-19  Gert Driesen  <drieseng@users.sourceforge.net>
8105
8106         A fix for bug #79810
8107         report.cs: CS1058 only applies to 2.0 profile (gmcs).
8108         codegen.cs: on 2.0 profile, non-exception throwables are wrapped in
8109         a RuntimeWrappedException by default.
8110
8111 2006-11-18  Marek Safar  <marek.safar@gmail.com>
8112
8113         A fix for bug #79843
8114         * delegate.cs (Delegate.VerifyMethod): Fixed covariance and contravariance
8115         implementation.
8116         (DelegateCreation.Error_NoMatchingMethodForDelegate): Ditto.
8117
8118 2006-11-18  Marek Safar  <marek.safar@gmail.com>
8119
8120         * driver.cs, namespace.cs: Uses faster IndexOf version.
8121
8122 2006-11-17  Marek Safar  <marek.safar@gmail.com>
8123
8124         A fix for bug #79941
8125         * class.cs (MemberCore.IsDuplicateImplementation): Add more tricks for
8126         operators.
8127         (Operator.Define): Implicit/Explicit operator of same type is duplicate
8128         even if internal name is different.
8129         * convert.cs (GetConversionOperator): Replaced EmitContext with parentType.
8130         (UserDefinedConversion): Simplified as the operators cannot be internal.
8131         * ecore.cs (Error_ValueCannotBeConverted): Take account of user
8132         conversions.
8133         (MethodLookup): Replaced EmitContext with parentType.
8134         * expression.cs: Updated.
8135
8136 2006-11-09  Raja R Harinath  <rharinath@novell.com>
8137
8138         * driver.cs (BadAssembly): Handle all the ugliness of
8139         DefineDynamicAssembly.
8140
8141 2006-11-08  Raja R Harinath  <rharinath@novell.com>
8142
8143         Address parts of #58244 -- most of what's left is in the runtime
8144         * driver.cs (LoadAssembly): Simplify slightly.  Add CS0009 and
8145         CS1509 error checks, and handle them for all assembly loads, not
8146         just the first invocation.
8147         (LoadModule): Likewise.  Move handling of 'adder_method' ...
8148         * codegen.cs (AssemblyClass.AddModule): ... here.
8149
8150 2006-11-02  Marek Safar  <marek.safar@gmail.com>
8151
8152         * statement.cs.cs (CollectionForeach.TryType): Issue a error when
8153         IEnumerable<T> is ambiguous.
8154
8155 2006-10-31  Marek Safar  <marek.safar@gmail.com>
8156
8157         A fix for bug #67689
8158         * statement.cs.cs (CollectionForeach.TryType): Issue a warning when
8159         GetEnumerator is ambiguous.
8160
8161         * report.cs: Add new warning.
8162
8163 2006-10-29  Marek Safar  <marek.safar@gmail.com>
8164
8165         A fix for bug #78602
8166         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
8167         to protected member can be nested type.
8168
8169 2006-10-28  Marek Safar  <marek.safar@gmail.com>
8170
8171         A fix for bug #78965
8172         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
8173         to protected member must derive from current type.
8174
8175 2006-10-27  Marek Safar  <marek.safar@gmail.com>
8176
8177         assign.cs: Reuses error method.
8178
8179         ecore.cs (Expression.Error_ValueCannotBeConverted): Report a value
8180         instead of type for constants.
8181         (Expression.Error_ValueAssignment): Common error method.
8182
8183         * expression.cs (UnaryMutator.ResolveOperator): Value cannot be used
8184         for any assignment.
8185
8186 2006-10-27  Marek Safar  <marek.safar@gmail.com>
8187
8188         A fix for bug #79081
8189         * expression.cs (MemberAccess.DoResolve): Check nested type
8190         accessibility.
8191
8192 2006-10-27  Atsushi Enomoto  <atsushi@ximian.com>
8193
8194         * doc.cs : nested delegates were not handled. Fixed bug #79754.
8195
8196 2006-10-26  Marek Safar  <marek.safar@gmail.com>
8197
8198         A fix for bug #76591
8199         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous method.
8200
8201 2006-10-26  Marek Safar  <marek.safar@gmail.com>
8202
8203         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Don't allow to have
8204         type forwarder of the same type multiple times.
8205
8206 2006-10-26  Raja R Harinath  <rharinath@novell.com>
8207
8208         Fix #78820
8209         * ecore.cs (PropertyExpr.InstanceResolve): Always resolve the
8210         instance as an rvalue, even when we later resolve as an lvalue.
8211
8212 2006-10-25  Martin Baulig  <martin@ximian.com>
8213
8214         * anonymous.cs: Fix #79673.
8215
8216 2006-10-24  Marek Safar  <marek.safar@seznam.cz>
8217
8218         A fix for bug #79666
8219         expression.cs (ArrayCreation.GetAttributableValue): An initializer can be
8220         ignored when is optimized (= default value) as its value is already set.
8221
8222 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
8223
8224         A fix for bug #79724
8225         * report.cs (SymbolRelatedToPreviousError): Uses DeclSpace instead of
8226         TypeContainer for type lookup.
8227
8228 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
8229
8230         A fix for bug #79231
8231         * ecore.cs (ResolveAsBaseTerminal): Removed redundant error test.
8232         * expression.cs (OverloadResolve): Always convert type name for
8233         an error message.
8234         (ResolveNamespaceOrType): Don't confuse a nested type with any 
8235         other member.
8236
8237 2006-10-18  Martin Baulig <martin@ximian.com>
8238
8239         * anonymous.cs: Propagate the IsStatic state, fixes the crasher in banshee.
8240
8241 2006-10-17  Miguel de Icaza  <miguel@novell.com>
8242
8243         * convert.cs: Fix typo, fixes the test-535.cs, we were casting to
8244         an int32, but requesting an int64 from the conversion
8245
8246 2006-10-12  Martin Baulig  <martin@ximian.com>
8247
8248         * anonymous.cs
8249         (AnonymousContainer.Resolve): Inflate the `ReturnType'.  Fixes #79592.
8250         
8251 2006-10-12  Martin Baulig  <martin@ximian.com>
8252
8253         * statement.cs
8254         (Using.EmitLocalVariableDeclFinally): Small fix for iterators.
8255
8256 2006-10-11  Miguel de Icaza  <miguel@novell.com>
8257
8258         * convert.cs: Remove broken code: I was doing the "Existance"
8259         tests for Implicit conversions.
8260
8261 2006-10-10  Miguel de Icaza  <miguel@novell.com>
8262
8263         * convert.cs: Added one missing case in
8264         ImplicitStandardConversionExists uint64 to intptr.
8265
8266         Fixes #59800
8267         
8268         * typemanager.cs (uintptr_type): another core known type.   
8269
8270         * ecore.cs (OperatorCast): routine used to do cast operations that
8271         depend on op_Explicit.  We could change some of the Decimal
8272         conversions to use this.
8273
8274         This one has a probe mechanism that checks both types for an op_
8275         which it coudl be used to eliminate two classes: CastToDecimal
8276         and CastFromDecimal.
8277
8278         * convert.cs: Implement the conversions documented in #59800
8279         
8280 2006-10-10  Martin Baulig  <martin@ximian.com>
8281
8282         * iterators.cs (Iterator.Resolve): Call RootScope.ResolveType()
8283         before RootScope.ResolveMembers().
8284
8285         * anonymous.cs (ScopeInfo.CapturedScope.ctor): Use the child's
8286         `CurrentType' if appropriate.
8287
8288 2006-10-09  Marek Safar  <marek.safar@seznam.cz>
8289
8290         A fix for bug #78568
8291         * cs-tokenizer.cs (Deambiguate_CloseParens): Expression cannot be cast
8292         when contains binary operators.
8293         * cs-parser.jay: Updated.
8294
8295 2006-10-09  Martin Baulig  <martin@ximian.com>
8296
8297         * delegate.cs
8298         (Delegate.DefineType): Don't call TypeParameter.Resolve() here;
8299         moved that into Define() and also do the other type parameter
8300         checks there.  Fixes #79094.  Added gtest-292.cs.
8301
8302         * expression.cs
8303         (ArrayCreation.EmitDynamicInitializers): Use `etype.IsValueType'
8304         since that doesn't include type parameters; don't use `Ldelema'
8305         for type parameters.  Fixes #78980.  Added gtest-293.cs.
8306
8307 2006-10-08  Marek Safar  <marek.safar@seznam.cz>
8308
8309         A fix for #77796
8310         * convert.cs (ExplicitReferenceConversion): Only enum to enum value
8311         conversion is allowed.
8312
8313 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
8314
8315         * ecore.cs (Expression.MemberLookup): Don't register any symbol for
8316         error reporting when no error occurs.
8317
8318 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
8319
8320         * cfold.cs (ConstantFold.BinaryFold): Report an error when the conversion
8321         does not exist.
8322
8323 2006-10-06  Raja R Harinath  <rharinath@novell.com>
8324
8325         Fix #79584
8326         * class.cs (DefineTypeBuilder): Check circular dependencies before
8327         setting the parent of the TypeBuilder.
8328         (CheckRecursiveDefinition): Don't use 'BaseType', since
8329         it may not be valid until after DefineTypeBuilder.  Use
8330         'base_type' instead.
8331
8332 2006-10-04  Martin Baulig  <martin@ximian.com>
8333
8334         Merged the Anonymous Methods patch.
8335
8336         * anonymous.cs, iterators.cs: The new anonymous methods code.
8337
8338         * statement.cs (Variable): New public abstract class.
8339         (LocalInfo.Variable): New public property.
8340         (LocalInfo.ResolveVariable): New public method.
8341         (Block.Flags): Add `IsIterator'.
8342         (Block.AddVariable): Improved the CS0136 check.
8343         (Block.AnonymousChildren): New public property.
8344         (Block.AddAnonymousChild): New public method.
8345         (ToplevelBlock): Update to use the new anonymous method framework.
8346         (ToplevelBlock.ctor): `container' is now a `Block' and not a
8347         `ToplevelBlock'; this is required to correctly implement the
8348         CS0136 check.
8349         (Fixed, Using): Use `TemporaryVariable' instead of directly
8350         creating the `LocalBuilder'.
8351
8352         * parameter.cs (Parameter.ResolveVariable): New public method.
8353         (Parameters.ResolveVariable): Likewise.
8354
8355         * ecore.cs (TemporaryVariable): Use the new `Variable' framework.
8356
8357         * class.cs (TypeContainer): Replaced the `iterators' list and
8358         corresponding methods with a list of `CompilerGeneratedClass'es.
8359         (TypeContainer.ResolveMembers): New public method.
8360         (Method): `IIteratorContainer' has been replaced by
8361         `IAnonymousHost'.
8362
8363         * expression.cs (VariableReference): New public abstract base
8364         class for `LocalVariableReference', `ParameterReference' and
8365         `This'.
8366
8367         * codegen.cs (EmitContext): Removed `capture_context',
8368         `HaveCaptureInfo', `EmitScopeInitFromBlock()' and `Capture*()'.
8369         (EmitContext.EmitThis): Removed.
8370
8371         * cs-parser.jay: Replace `iterator_container' with
8372         `anonymous_host'.       
8373
8374 2006-10-04  Martin Baulig  <martin@ximian.com>
8375
8376         * generic.cs (GenericMethod): Don't make this abstract.
8377         (Constraints.Clone): Added dummy implementation.
8378
8379 2006-10-04  Raja R Harinath  <harinath@gmail.com>
8380
8381         Fix #79577
8382         * namespace.cs (LookForAnyGenericType): Avoid nullref on
8383         'declspaces'.  Avoid allocating arrays willy-nilly.
8384
8385         Fix #79553
8386         * cfold.cs (BinaryFold): Move boolean Equality and Inequality
8387         cases out of the switch.
8388
8389 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
8390
8391         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Better error
8392         message when non-generic type is used with the type arguments.
8393         * expression.cs: Updated.
8394
8395 2006-09-28  Raja R Harinath  <rharinath@novell.com>
8396
8397         Fix #79013
8398         * convert.cs (Convert.ImplicitStandardConversionExists): Avoid infloop.
8399         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
8400         Change semantics slightly.  Don't insist on having only one
8401         temporary EmptyExpression -- just throttle the creation of new ones.
8402
8403         Fix #79451
8404         * ecore.cs (Expression.MemberLookup): Enable CS0229 errors for
8405         non-interfaces too.  If no methods are found, don't try to create
8406         a MethodGroupExpr.
8407
8408 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
8409
8410         * ecore.cs (ResolveAsTypeStep): Print better error when type can be
8411         generic type.
8412
8413         * namespace.cs (Namespace.LookForAnyGenericType): New method to help
8414         us produce better error message.
8415
8416 2006-09-27  Marek Safar  <marek.safar@seznam.cz>
8417
8418         * expression.cs (Binary.ResolveOperator): Warn about a side effect
8419         of the `|' operator.
8420
8421         * report.cs: A new warning added.
8422
8423 2006-09-27  Martin Baulig  <martin@ximian.com>
8424
8425         * generic.cs (GenericMethod): Don't make this abstract.
8426
8427 2006-09-27  Martin Baulig  <martin@ximian.com>
8428
8429         * report.cs
8430         (InternalErrorException): Added overloaded ctor taking a params array.
8431
8432 2006-09-26  Marek Safar  <marek.safar@seznam.cz>
8433
8434         * class.cs, codegen.cs, const.cs, cs-tokenizer.cs, driver.cs, ecore.cs:
8435         Fixed the cases when same error was reported twice.
8436
8437         * report.cs (SymbolRelatedToPreviousError): Simplified as all our messages
8438         now report symbol information.
8439
8440 2006-09-25  Martin Baulig  <martin@ximian.com>
8441
8442         * class.cs: Completely unified with the gmcs version.
8443
8444 2006-09-25  Martin Baulig  <martin@ximian.com>
8445
8446         * typemanager.cs (TypeManager.IsNullableType): New public function.
8447         (TypeManager.IsNullableTypeOf): Likewise.
8448         (TypeManager.IsNullableValueType): Likewise.
8449
8450         * class.cs (MethodCore): Added the `GenericMethod' argument from
8451         gmcs and also unified all classes derived from `MethodCore' with gmcs.
8452
8453 2006-09-24  Raja R Harinath  <harinath@gmail.com>
8454
8455         * convert.cs: Unify with gmcs version.
8456
8457 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
8458
8459         * decl.cs (DeclSpace.VerifyClsCompliance): When type has type parameters
8460         verify them as well.
8461
8462         * report.cs: New warning.
8463
8464 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
8465
8466         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
8467         for anonymous block with out argument.
8468
8469 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
8470
8471         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
8472         not used private events only.
8473
8474 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
8475
8476         * cfold.cs (BinaryFold): On the guest to unify empty constant cast.
8477
8478         * const.cs (Const.Define): Check for constant type.
8479         (Const.IsConstantTypeValid): Looks for valid constant types.
8480
8481         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
8482
8483         * ecore.cs (EmptyConstantCast): New common class for all constant based
8484         EmptyCast(s).
8485
8486         * expression.cs (Is.DoResolve): Handle null constant especially.
8487         (New.DoResolve): Check for new void().
8488         (MemberAccess.DoResolve): Cope with all kind of nulls.
8489
8490         * literal.cs (NullConstant): Uses EmptyConstantCast.
8491         (NullDefault): Based on EmptyConstantCast.
8492         (NullLiteral): Uses EmptyConstantCast.
8493
8494         * statement.cs (Block.ResolveMeta): Check for constant type.
8495
8496 2006-09-22  Martin Baulig  <martin@ximian.com>
8497
8498         * delegate.cs, attribute.cs: Merged with the gmcs versions.
8499
8500 2006-09-22  Raja R Harinath  <rharinath@novell.com>
8501
8502         * literal.cs (NullDefault): The type of default(IFoo) is 'IFoo',
8503         not the null type.
8504
8505         Fix part of #79451
8506         * typemanager.cs (Closure.Filter): Consider PrivateScope attributes.
8507         * decl.cs (DeclSpace.FindMemberToOverride): Likewise.  Reorganize
8508         code slightly.
8509
8510 2006-09-22  Martin Baulig  <martin@ximian.com>
8511
8512         * ecore.cs: Merged with the gmcs version.
8513
8514         * generic.cs (ConstructedType): New dummy class.
8515         (TypeArguments): Don't make this abstract.
8516
8517         * typemanager.cs
8518         (TypeManager.IsGenericTypeDefinition): New method.
8519         (TypeManager.GetGenericFieldDefinition): Moved here from gmcs.
8520
8521 2006-09-22  Raja R Harinath  <rharinath@novell.com>
8522
8523         * expression.cs (ComposedCast): Check for arrays of TypedReference
8524         before creating the type, not after.
8525
8526 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
8527
8528         * cfold.cs, const.cs, enum.cs, statement.cs: Updated
8529         after ToType change.
8530
8531         * constant.cs (Constant.ImplicitConversionRequired): Designed to used
8532         when constant must be implicitly convertible.
8533
8534         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
8535
8536         * ecore.cs (NullCast): Derives from NullConstant.
8537
8538         * expression.cs (Is.DoResolve): Removed useless variables.
8539         (Conditional.DoResolve): Quick hack for `Foo () ? null : null'.
8540         (New.Constantify): Add enum support.
8541         (MemberAccess.DoResolve): Add warning when accessing null constant or
8542         variable.
8543
8544         * generic.cs (GenericConstraints.IsReferenceType): Another dummy
8545         property.
8546
8547         * literal.cs (NullConstant): New abstract class with common
8548         functionality for all null specializations.
8549         (NullDefault): Represents default(X) when result can be
8550         reduced to null.
8551         (NullLiteral): Updated.
8552
8553         * report.cs: Add new warning.
8554
8555 2006-09-21  Martin Baulig  <martin@ximian.com>
8556
8557         * generic.cs (GenericTypeParameterBuilder): Removed this ugly hack.
8558
8559 2006-09-21  Martin Baulig  <martin@ximian.com>
8560
8561         * generic.cs (GenericConstraints): New dummy class.
8562         (Constraints): Likewise.
8563         (TypeParameter): Likewise.
8564         (TypeParameterName): Likewise.
8565         (GenericMethod): Likewise.
8566
8567         * typemanager.cs (TypeManager.GetGenericArguments): New method.
8568
8569         * decl.cs: Merged with the gmcs version.
8570
8571 2006-09-21  Raja R Harinath  <rharinath@novell.com>
8572
8573         * generic.cs (TypeParameter): Implement IMemberContainer.
8574         (GenericTypeParameterBuilder): New.  An abominable repugnant hack.
8575
8576         * rootcontext.cs: Unify with gmcs version.
8577
8578         * report.cs: Unify with gmcs version.
8579         * typemanager.cs (AddTypeParameter, LookupTypeParameter): Move
8580         from gmcs/generics.cs.
8581         * generics.cs (TypeParameter): New dummy class.
8582
8583         * support.cs: Unify with gmcs version.
8584
8585 2006-09-20  Raja R Harinath  <rharinath@novell.com>
8586
8587         * ecore.cs (MethodGroupExpr.ResolveGeneric): New dummy method.
8588         * expression.cs (MemberAccess, BaseAccess): Remove GMCS_SOURCE #ifdef.
8589
8590         * decl.cs (MemberName): Unify with gmcs, except for GetTypeExpression.
8591         * generic.cs (TypeArguments): New dummy class to help avoid #ifdefs.
8592         * mcs.exe.sources: Add generic.cs.
8593
8594         * codegen.cs: Unify with gmcs version.
8595
8596         * codegen.cs (IResolveContent.GenericDeclContainer): Copy from gmcs.
8597         (EmitContext): Add GenericDeclContainer implementation.
8598         * decl.cs (MemberCore, DeclSpace): Likewise.
8599         * namespace.cs: Remove #ifdef GMCS_SOURCE.
8600
8601         * namespace.cs (GetTypeInAssembly): Remove #ifdef GMCS_SOURCE.
8602         MCS TypeManager has a corresponding dummy method.
8603
8604 2006-09-19  Martin Baulig  <martin@ximian.com>
8605
8606         * expression.cs: Completely merged with the gmcs version.
8607
8608 2006-09-19  Martin Baulig  <martin@ximian.com>
8609
8610         * expression.cs (Invocation): Merged with the gmcs version.
8611         (ArrayAccess.GetStoreOpcode): Likewise.
8612
8613 2006-09-19  Martin Baulig  <martin@ximian.com>
8614
8615         * typemanager.cs
8616         (TypeManager.IsGenericMethod): Moved here from ../gmcs/generic.cs.
8617         (TypeManager.IsGenericMethodDefinition): Likewise.
8618
8619 2006-09-19  Martin Baulig  <martin@ximian.com>
8620
8621         * typemanager.cs
8622         (TypeManager.IsEqual): Moved the gmcs implementation here.
8623         (TypeManager.DropGenericTypeArguments): Likewise.
8624         (TypeManager.DropGenericMethodArguments): Likewise.
8625         (TypeManager.GetTypeArguments): Moved here from gmcs.
8626         (TypeManager.HasGenericArguments): Likewise.
8627
8628 2006-09-19  Martin Baulig  <martin@ximian.com>
8629
8630         * expression.cs (Binary): Merged with the gmcs version.
8631
8632 2006-09-19  Martin Baulig  <martin@ximian.com>
8633
8634         * expression.cs (Probe, As, Is): Merged with the gmcs version.
8635
8636 2006-09-19  Martin Baulig  <martin@ximian.com>
8637
8638         * typemanager.cs: Merged with the gmcs version.
8639
8640 2006-09-16  Raja R Harinath  <rharinath@novell.com>
8641
8642         * AssemblyInfo.cs [GMCS_SOURCE]: Unify with gmcs source.
8643         * driver.cs: Likewise.
8644
8645 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
8646
8647         A fix for #79401
8648         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
8649         only if parent type is class.
8650         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
8651         update.
8652
8653 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
8654
8655         * cs-parser.jay,
8656         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
8657         keywords are used.
8658         * typemanager.cs(CSharpName): Converts NullType to null.
8659
8660 2006-09-15  Martin Baulig  <martin@ximian.com>
8661
8662         * typemanager.cs
8663         (TypeManager.GetMethodName): Added mcs implementation.
8664         (TypeManager.IsEqual): Likewise.
8665
8666         * ecore.cs
8667         (SimpleName.RemoveGenericArity): Added dummy implementation.
8668
8669         * pending.cs: Merged with the gmcs version.     
8670
8671 2006-09-15  Martin Baulig  <martin@ximian.com>
8672
8673         * statement.cs: Merge with the gmcs version.
8674
8675 2006-09-15  Martin Baulig  <martin@ximian.com>
8676
8677         * statement.cs (Switch): Merge with the gmcs implementation
8678         (without nullables), which is newer.
8679
8680 2006-09-15  Martin Baulig  <martin@ximian.com>
8681
8682         * statement.cs (Block.Variables): Make this public.
8683         (ToplevelBlock.Parameters): Make this a property.
8684         (Throw.Resolve): Use `TypeManager.IsSubclassOf ()'.
8685
8686 2006-09-15  Martin Baulig  <martin@ximian.com>
8687
8688         * namespace.cs: Merge with the gmcs version.
8689
8690 2006-09-15  Martin Baulig  <martin@ximian.com>
8691
8692         * decl.cs (MemberName): Minor code cleanups.
8693
8694 2006-09-15  Martin Baulig  <martin@ximian.com>
8695
8696         * parameter.cs: Merge with the gmcs version.
8697
8698 2006-09-15  Martin Baulig  <martin@ximian.com>
8699
8700         * enum.cs: Merge with the gmcs version: 3005 is a warning in gmcs
8701         and an error in mcs.
8702
8703 2006-09-15  Martin Baulig  <martin@ximian.com>
8704
8705         * flowanalysis.cs: Merged from GMCS; added the generics code into
8706         a `GMCS_SOURCE' conditional so we can share this file.
8707
8708 2006-09-08  Martin Baulig  <martin@ximian.com>
8709
8710         * typemanager.cs (TypeManager.interlocked_type): New public field.
8711         (TypeManager.int_interlocked_compare-exchange): New public field.
8712         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
8713         enumerator types here and call InitGenericCoreTypes().
8714         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
8715         after calling InitEnumUnderlyingTypes().
8716
8717         * rootcontext.cs
8718         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
8719         `classes_second_stage'. 
8720
8721 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
8722
8723         * assign.cs, ecore.cs, expression.cs: Share error message text.
8724         * class.cs (FieldMember.Define): Check for varible of static type.
8725         * driver.cs (LoadAssembly): Uses error output for errors.
8726         * statement.cs: Updated.
8727
8728 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
8729
8730         * expression.cs (Error_OperatorCannotBeApplied): Report type instead of
8731         type instance.
8732
8733 2006-09-07  Martin Baulig  <martin@ximian.com>
8734
8735         * driver.cs
8736         (MainDriver): Revert r62663 from Marek; see #70506 for details.
8737
8738 2006-08-29  Miguel de Icaza  <miguel@novell.com>
8739
8740         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
8741         
8742 2006-08-17  Miguel de Icaza  <miguel@novell.com>
8743
8744         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
8745         #52019 and #79064, the use of the \uXXXX sequence in source code
8746         to represent unicode characters.
8747
8748 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
8749
8750         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
8751         support.
8752         * class.cs, ecore.cs, statement.cs: Merged to one error message.
8753
8754 2006-08-13  Miguel de Icaza  <miguel@novell.com>
8755
8756         * assign.cs: Catch attempts to assign to a method groups in += and
8757         report as 1656
8758
8759 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
8760
8761         A fix for #79056
8762         * cs-parser.jay: Don't destroy current array type by typeof of array's.
8763
8764 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
8765
8766         * class.cs (Method.Define): Issue a warning when generic method looks like
8767         an entry point.
8768         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
8769         as well.
8770
8771 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
8772  
8773         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
8774         looking for ctor.
8775         * decl.cs (MemberCache.FindMembers): When container is interface we need to
8776         search all base interfaces as a member can be ambiguous.
8777         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
8778         Constructor member type filter. 
8779         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
8780         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
8781         reporting for returned memberinfos.
8782         * report.cs: Updated.
8783         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
8784         version to work on all runtimes.
8785         (TypeManager.RealMemberLookup): Removed members filtering.
8786
8787 2006-08-08  Raja R Harinath  <rharinath@novell.com>
8788
8789         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
8790         (PropertyExpr.EmitAssign): Likewise.
8791         * expression.cs (Indirection.EmitAssign): Likewise.
8792         (LocalVariableReference.EmitAssign): Likewise.
8793         (ParameterReference.EmitAssign): Likewise.
8794         (Invocation.EmitArguments): Likewise.
8795         (ArrayAccess.EmitAssign): Likewise.
8796         (IndexerAccess.EmitAssign): Likewise.
8797         (This.EmitAssign): Likewise.
8798         (ConditionalLogicalOperator.Emit): Likewise.
8799
8800         Fix #79026
8801         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
8802         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
8803         leave it in after returning it.
8804         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
8805
8806 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
8807
8808         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
8809         message.
8810
8811 2006-08-03  Raja R Harinath  <rharinath@novell.com>
8812
8813         Fix cs0146-3.cs and cs0146-4.cs.
8814         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
8815         enclosing types don't depend on the current type.
8816
8817 2006-08-02  Raja R Harinath  <rharinath@novell.com>
8818
8819         Fix #77963
8820         * class.cs (TypeContainer.DoDefineMembers): Use
8821         FindBaseMemberWithSameName on Parent, since we're interested in
8822         whether we hide inherited members or not.
8823         (FindBaseMemberWithSameName): Make slightly more robust.
8824
8825         Fix the non-generic testcase from #77396
8826         * decl.cs (DeclSpace.DeclContainer): Remove override.
8827
8828         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
8829         declspaces for doppelgangers too.
8830         (UsingEntry): Implement IResolveContext.
8831         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
8832         'this' as the resolve context.
8833         (LocalAliasEntry): Likewise.
8834
8835         Implement parts of #77403
8836         * roottypes.cs (RootDeclSpace): New.  Used to represent the
8837         toplevel declaration space.  Each namespace declaration introduces
8838         a "partial" root declaretion space.
8839         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
8840         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
8841         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
8842         from 'current_namespace.SlaveDeclSpace'.
8843         (namespace_declaration): Likewise.
8844         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
8845         check.  It can't happen now.
8846         * decl.cs (DeclSpace.LookupType): Likewise.
8847         * driver.cs (MainDriver): Sanity check.
8848
8849 2006-08-01  Raja R Harinath  <rharinath@novell.com>
8850
8851         * decl.cs (DeclSpace.FindNestedType): Remove.
8852         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
8853         LookupTypeContainer to get the container of the nested type.
8854         * class.cs (TypeContainer.FindNestedType): Make non-override.
8855
8856 2006-07-31  Raja R Harinath  <rharinath@novell.com>
8857
8858         * decl.cs (DeclSpace.PartialContainer): Move field from ...
8859         * class.cs (TypeContainer.PartialContainer): ... here.
8860         (TypeContainer.AddBasesForPart): New helper.
8861         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
8862         instead.
8863         * cs-parser.jay (current_class): Convert to DeclSpace.
8864         (struct_declaration, interface_declaration, class_declaration):
8865         Use AddBasesForPart instead of .Bases directly.
8866         * const.cs, iterators.cs: Update to changes.
8867
8868 2006-07-28  Raja R Harinath  <rharinath@novell.com>
8869
8870         * class.cs (TypeContainer.AddMemberType): Rename from
8871         AddToTypeContainer.
8872         (TypeContainer.AddMember): Rename from AddToMemberContainer.
8873         (AddTypeContainer): New.  Combine AddClassOrStruct and
8874         AddInterface.
8875         (AddPartial): Update.  Add 'is_partial' argument.
8876         * roottypes.cs: Update to changes.
8877         * cs-parser.jay (push_current_class): New helper for handling
8878         current_container and current_class.
8879         (struct_declaration, interface_declaration, class_declaration):
8880         Use it.
8881
8882 2006-07-26  Raja R Harinath  <rharinath@novell.com>
8883
8884         * roottypes.cs: Rename from tree.cs.
8885
8886         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
8887         * tree.cs (Tree, ITreeDump): Remove types.
8888         * rootcontext.cs (tree, Tree): Remove fields.
8889         (root, ToplevelTypes): New.
8890         * *.cs: Update to rename.
8891
8892         * tree.cs (Tree.RecordDecl): Remove.
8893         (RootTypes.AddToTypeContainer): Record the toplevel type in its
8894         namespace here.
8895         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
8896
8897 2006-07-23  Raja R Harinath  <harinath@gmail.com>
8898
8899         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
8900         DoFlowAnalysis and OmitStructFlowAnalysis here.
8901         (ec.With): Rename from WithUnsafe and generalize.
8902         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
8903         (ec.WithFlowAnalyis): New.
8904         * ecore.cs, expression.cs, statement.cs: Update.
8905
8906 2006-07-22  Raja R Harinath  <harinath@gmail.com>
8907
8908         * statement.cs (Block.ResolveMeta): Simplify slightly.
8909
8910         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
8911         multiple boolean fields.  Convert InUnsafe, constant_check_state,
8912         check_state to flags.
8913         (CheckState, ConstantCheckState): Update.
8914         (InUnsafe): New read-only property.
8915         (FlagsHandle): Rename from CheckStateHandle and convert to handle
8916         arbitrary flags.
8917         (WithUnsafe): New helper similar to WithCheckState.
8918         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
8919         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
8920
8921 2006-07-21  Raja R Harinath  <rharinath@novell.com>
8922
8923         Make comparisons use the same IL irrespective of whether they're
8924         in a 'checked' or 'unchecked' context: one of the issues in #78899
8925         * codegen.cs (EmitContext.CheckState): Make read-only property.
8926         (EmitContext.ConstantCheckState): Likewise.
8927         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
8928         helper that implement a save/restore stack for CheckState
8929         values.  This is the only way to change check-state.
8930         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
8931         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
8932         (CheckedExpr.EmitBranchable): New forwarding method.
8933         (UnCheckedExpr): Likewise.
8934         * statement.cs (Block.ResolveMeta): Use WithCheckState.
8935         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
8936         (Checked.Resolve, checked.DoEmit): Likewise.
8937
8938 2006-07-20  Miguel de Icaza  <miguel@novell.com>
8939
8940         * anonymous.cs: Cache the resolved anonymous delegate, and return
8941         this so that the ResolveTopBlock is only triggered once, not
8942         twice.
8943
8944         Currently we trigger ResolvetopBlock twice due to a first pass of
8945         argument check compatibility, and a second pass that does the
8946         actual resolution.   
8947         
8948 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
8949
8950         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
8951         modifiers.
8952         * rootcontext.cs (Reset): Add helper_classes.
8953
8954 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
8955
8956         A fix for #78860
8957         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
8958         correctly.
8959
8960 2006-07-13  Miguel de Icaza  <miguel@novell.com>
8961
8962         * statement.cs (Lock): Handle expressions of type
8963         TypeManager.null_type specially.  Fixes #78770
8964
8965 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
8966
8967         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
8968         to an event.
8969
8970 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
8971
8972         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
8973         for accessors as well.
8974         * ecore.cs (EventExpr): Add AccessorTable.
8975
8976 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
8977
8978         A fix for #78738
8979         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
8980         for CS0122 where appropriate.
8981         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
8982         level attributes.
8983         (Filter): Assembly can be null in the case of top level attributes.
8984
8985 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
8986
8987         A fix for #78690
8988
8989         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
8990         is done at global level.
8991
8992 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
8993
8994         A fix for #77002, Implemented TypeForwarder support.
8995
8996         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
8997         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
8998         * typemanager.cs (): Add type_forwarder_attr_type.
8999
9000 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
9001
9002         * report.cs: Add CS0469 warning.
9003
9004 2006-06-21  Martin Baulig  <martin@ximian.com>
9005
9006         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
9007         the `try'-block, so we also report CS0016 etc. there.
9008
9009 2006-06-21  Martin Baulig  <martin@ximian.com>
9010
9011         * delegate.cs
9012         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
9013
9014 2006-06-21  Martin Baulig  <martin@ximian.com>
9015
9016         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
9017         also report CS1686 for parameters.
9018
9019 2006-06-21  Martin Baulig  <martin@ximian.com>
9020
9021         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
9022         instead of an error if the value is not implicitly convertible to
9023         the switch types; fixes #77964.
9024
9025 2006-06-21  Raja R Harinath  <rharinath@novell.com>
9026
9027         Fix #78673
9028         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
9029         FieldBuilder is null.
9030
9031         Fix #78662
9032         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
9033         'left' and 'right' before error-checking.
9034
9035 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
9036
9037         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
9038         Fixed bug #78601.
9039         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
9040         (FieldExpr.DoResolve): likewise.
9041         (PropertyExpr.InstanceResolve): likewise.
9042         (EventExpr.InstanceResolve): likewise. 
9043
9044 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
9045
9046         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
9047         attribute applicable tests for attribute argument.
9048
9049 2006-06-02  Raja R Harinath  <rharinath@novell.com>
9050
9051         Fix #78079
9052         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
9053         (Binary.OverloadResolve_PredefinedIntegral): New.
9054         (Binary.OverloadResolve_PredefinedFloating): New.
9055         (Binary.OverloadResolve_PredefinedString): New.
9056         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
9057         Follow the standard more closely, and treat numeric promotions in
9058         terms of overload resolution.
9059         (Binary.CheckShiftArguments): Simplify.
9060
9061 2006-06-01  Raja R Harinath  <rharinath@novell.com>
9062
9063         * flowanalysis.cs (MyBitVector): Simplify representation.
9064         (MyBitVector.Clone): Avoid allocating BitArray.
9065         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
9066         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
9067         (*): Update.  Change all references to MyBitVector.And and
9068         MyBitVector.Or to &= and |=.
9069
9070 2006-05-29  Raja R Harinath  <rharinath@novell.com>
9071
9072         Fix cs0231-[34].cs.
9073         * cs-parser.jay (formal_parameter_list): Extend the pattern below
9074         to param arguments too.
9075
9076 2006-05-26  Miguel de Icaza  <miguel@novell.com>
9077
9078         * cs-parser.jay: Catch another parsing form for arglist being
9079         followed by other arguments.  Fixes #78313.
9080
9081 2006-05-24  Raja R Harinath  <rharinath@novell.com>
9082
9083         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
9084         checking of out parameters to ...
9085         (FlowBranchingToplevel.Merge): ... here.
9086         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
9087         set, propagate the origin upward, and only complain if there was
9088         no other error.
9089         (FlowBranchingException.AddContinueOrigin): Likewise.
9090         (FlowBranchingException.AddReturnOrigin): Likewise.
9091         (FlowBranchingException.AddGotoOrigin): Likewise.       
9092
9093 2006-05-23  Raja R Harinath  <rharinath@novell.com>
9094
9095         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
9096         unreachable, skip it.
9097         (FlowBranchingException.Merge): Always propagate jumps, even if
9098         the finally block renders subsequent code unreachable.
9099
9100 2006-05-18  Raja R Harinath  <rharinath@novell.com>
9101
9102         Fix #77601
9103         * statement.cs (Goto.Resolve): Move responsibility for resolving
9104         'goto' to FlowBranching.AddGotoOrigin.
9105         (Goto.SetResolvedTarget): New.  Callback to set the
9106         LabeledStatement that's the target of the goto.
9107         (Goto.DoEmit): Use Leave instead of Br when crossing an
9108         unwind-protect boundary.
9109         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
9110         LookupLabel and adjust to new semantics.
9111         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
9112         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
9113         Goto.SetResolvedTarget to update target.
9114         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
9115         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
9116         AddBreakOrigin & co.  Delay propagation until ...
9117         (FlowBranchingException.Merge): ... this.
9118
9119         * statement.cs (Block.Resolve): Always depend on flow-branching to
9120         determine unreachability.  Kill workaround that originally emitted
9121         only one statement after an "unreachable" label (see infloop in
9122         test-515.cs).
9123
9124         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
9125         This is still "wrong", but anything better would probably need a
9126         multi-pass algorithm.
9127         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
9128         usage vector.  Force current usage vector to be reachable, to
9129         optimistically signify backward jumps.
9130         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
9131         detected.
9132         (FlowBranchingLabeled.Merge): New.  If no backward jump was
9133         detected, return the original salted-away usage vector instead,
9134         updated with appropriate changes.  Print unreachable warning if
9135         necessary.
9136         * statement.cs (Block.Resolve): Don't print unreachable warning on
9137         a labeled statement.
9138
9139 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
9140
9141         * driver.cs: Pass filename without path to AssemblyBuilder's 
9142         AddResourceFile. Fixes bug #78407.
9143
9144 2006-05-17  Raja R Harinath  <rharinath@novell.com>
9145
9146         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
9147         * flowanalysis.cs (FlowBranchingLabeled): ... here.
9148         (FlowBranching.MergeChild): Overwrite
9149         reachability information from Labeled branchings too.
9150
9151 2006-05-16  Raja R Harinath  <rharinath@novell.com>
9152
9153         * statement.cs (Goto.Resolve): Merge jump origins here ...
9154         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
9155
9156         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
9157         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
9158         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
9159         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
9160         here, ...
9161         * statement.cs (Goto.Resolve): ... not here.
9162         (Goto.Emit): Remove CS1632 check.
9163
9164 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
9165
9166         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
9167         error message.
9168
9169 2006-05-11  Raja R Harinath  <rharinath@novell.com>
9170
9171         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
9172         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
9173         (FlowBranchingException.Label): Likewise.
9174
9175         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
9176         given value.
9177         (MyBitVector.Or): Use it to avoid losing information (Count).
9178         (FlowBranching.MergeOrigins): Likewise.
9179
9180         * flowanalysis.cs (UsageVector.IsDirty): Remove.
9181         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
9182         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
9183         (UsageVector.ToString): Simplify.
9184         (UsageVector.MergeSiblings): Move here from ...
9185         (FlowBranching.Merge): ... here.
9186         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
9187         not a MyBitVector.
9188
9189 2006-05-10  Raja R Harinath  <rharinath@novell.com>
9190
9191         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
9192         null bitvector is treated as all-true.
9193
9194         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
9195         (MyBitVector): Rationalize invariants.  'vector != null' implies
9196         that we have our own copy of the bitvector.  Otherwise,
9197         'InheritsFrom == null' implies all inherited bits are true.
9198
9199 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
9200
9201         * statement.cs (LocalInfo): Add IsConstant.
9202         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
9203         local variable for constants.
9204
9205 2006-05-09  Raja R Harinath  <rharinath@novell.com>
9206
9207         * flowanalysis.cs (MyBitVector.Empty): New.
9208         (MyBitVector): Don't allow InheritedFrom to be null.
9209         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
9210         (UsageVector, FlowBranching): Update to changes.
9211
9212         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
9213         recursion.  The 'Parent == null' condition isn't sufficient for
9214         anonymous methods.
9215         (FlowBranching.AddBreakOrigin): Likewise.
9216         (FlowBranching.AddContinueOrigin): Likewise.
9217         (FlowBranching.AddReturnOrigin): Likewise.
9218         (FlowBranching.StealFinallyClauses): Likewise.
9219         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
9220         (FlowBranching.CheckOutParameters): Likewise.
9221         (FlowBranchingToplevel): Terminate all the above recursions here.
9222         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
9223         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
9224
9225         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
9226         toplevel block.
9227         (FlowBranchingToplevel): New.  Empty for now.
9228         (FlowBranching.MergeTopBlock): Update.
9229         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
9230         branching for the anonymous delegate.
9231         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
9232
9233         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
9234         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
9235         information at the start of the merge.  Reorganize.
9236
9237 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
9238
9239         * class.cs (MethodData.Define): Method cannot implement interface accessor.
9240
9241 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
9242
9243         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
9244         to newly introduced ctor.
9245
9246         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
9247         message to one place.
9248         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
9249         global namespace.
9250
9251 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
9252
9253         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
9254
9255         * ecore.cs (Expression.ResolveAsConstant): Updated.
9256
9257         * statement.cs (ResolveMeta): Updated.
9258
9259 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
9260
9261         * cs-parser.jay: __arglist cannot be used in initializer.
9262
9263 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
9264
9265         A fix for #77879
9266         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
9267         private types.
9268
9269 2006-05-05  Raja R Harinath  <rharinath@novell.com>
9270
9271         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
9272         (LabeledStatement): Add 'name' parameter.
9273         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
9274         (Block.AddLabel): Update to changes.
9275         * cs-parser.jay (labeled_statement): Likewise.
9276
9277         * flowanalysis.cs (BranchingType.Labeled): New.
9278         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
9279         (FlowBranchingLabeled): New.  Does nothing for now, but will
9280         eventually handle 'goto' flows.
9281         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
9282         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
9283         that's terminated ...
9284         (Block.Resolve): ... here.
9285
9286         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
9287         (UsageVector.MergeFinallyOrigins): Likewise.
9288         (FlowBranching.InTryOrCatch): Likewise.
9289         (FlowBranching.AddFinallyVector): Likewise.
9290         (FlowBranchingException): Update to changes.
9291
9292         Fix #78290
9293         * statement.cs (Return.Resolve): Move error checking to ...
9294         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
9295         (FlowBranchingException): Handle return origins like break and
9296         continue origins.
9297         (FlowBranching.UsageVector.CheckOutParameters): Remove.
9298
9299 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
9300
9301         A fix for #76122
9302         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
9303         filter.
9304
9305 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
9306
9307         A fix for #77543
9308         * class.cs (MethodData.Define): Do public accessor check only when method
9309         implements an interface.
9310
9311 2006-05-04  Raja R Harinath  <rharinath@novell.com>
9312
9313         Remove special handling of 'break'
9314         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
9315         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
9316         (UsageVector.Break): Remove.
9317         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
9318         reachability.
9319         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
9320
9321         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
9322         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
9323
9324 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
9325
9326         A fix for #75726
9327         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
9328         be the interface member.
9329
9330 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
9331
9332         A fix for #60069
9333         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
9334         for emitting small (int) values.
9335
9336 2006-05-03  Raja R Harinath  <rharinath@novell.com>
9337
9338         Fix #59427
9339         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
9340         control-flow passes through the 'finally' after merging-in all the
9341         control-flows from 'try' and the 'catch' clauses.
9342
9343         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
9344         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
9345         always true at the only non-recursive entry point.
9346         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
9347         FlowBranchingBreakable.
9348         (FlowBranchingLoop): Remove.
9349         * statement.cs (Return.DoResolve): Update to changes.
9350
9351         Fix #76471, #76665
9352         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
9353         (FlowBranching.CreateBranching): Handle it: create a
9354         FlowBranchingContinuable.
9355         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
9356         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
9357         except that it handles the 'continue' command.
9358         (FlowBranching.UsageVector.MergeOrigins): Rename from
9359         MergeBreakOrigins.
9360         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
9361         except that it overrides AddContinueOrigin.
9362         (FlowBranchingException): Override AddContinueOrigin, similar to
9363         AddBreakOrigin.
9364         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
9365         Create a new branching around the embedded statement.
9366         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
9367         control flow after the embedded statement.
9368         (Continue.Resolve): Move all error checking to AddContinueOrigin.
9369
9370         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
9371         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
9372         FlowBranchingBreakable.
9373         (FlowBranchingSwitch): Remove.
9374
9375         Fix test-503.cs
9376         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
9377         error reporting to ...
9378         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
9379         Rename from 'AddBreakVector'.  Add new location argument.  Return
9380         a bool indicating whether the 'break' crosses an unwind-protect.
9381         (FlowBranchingException.AddBreakOrigin): Add.
9382         (FlowBranchingException.Merge): Propagate 'break's to surrounding
9383         flowbranching after updating with the effects of the 'finally'
9384         clause.
9385         (FlowBranchingBreakable): New common base class for
9386         FlowBranchingLoop and FlowBranchingSwitch.
9387
9388         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
9389         embedded statement.
9390         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
9391
9392 2006-05-02  Raja R Harinath  <rharinath@novell.com>
9393
9394         * statement.cs (Do.Resolve): If the loop is infinite, set the
9395         barrier.
9396         (While.Resolve, For.Resolve): Set a barrier after the embedded
9397         statement.  There's no direct control flow that goes from the end
9398         of the embedded statement to the end of the loop.
9399         * flowanalysis.cs (FlowBranching.Infinite): Remove.
9400         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
9401         above ensure that the reachability is correctly computed.
9402
9403         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
9404         (UsageVector.MergeBreakOrigins): If the current path is
9405         unreachable, treat it as if all parameters/locals are initialized.
9406         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
9407         infinite loops before merging-in break origins.
9408
9409         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
9410         (Reachability.Reachable): Split part into ...
9411         (Reachability.Unreachable): ... this.  Simplify.
9412         (Reachability.IsUnreachable): Use 'Unreachable' instead.
9413
9414         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
9415         (Reachability.SetThrowsSometimes): Likewise.
9416         (FlowBranchingBlock.MergeTopBlock): Don't compare against
9417         TriState.Always, use corresponding property.
9418         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
9419         (Block.Resolve): Likewise.  Remove some redundant checks.
9420
9421 2006-05-02  Raja R Harinath  <harinath@gmail.com>
9422
9423         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
9424         (Reachability.Meet): Don't bother checking AlwaysThrows --
9425         barrier is always set.
9426         (FlowBranchingBlock.Merge): Likewise.
9427
9428 2006-05-01  Raja R Harinath  <harinath@gmail.com>
9429
9430         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
9431         checks for unreachable.
9432
9433 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
9434
9435         A fix for #77980
9436         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
9437
9438         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
9439         whether field is really assigned.
9440
9441 2006-04-30  Raja R Harinath  <harinath@gmail.com>
9442
9443         * flowanalysis.cs (Reachability): Make 4-argument constructor
9444         private.
9445         (Reachability.Meet): Rename from 'And'.  Remove static variant.
9446         (Reachability.Always): Rename from the highly misleading
9447         'Reachability.Never'.
9448         (FlowBranching.Merge): Update to changes.  Mark an impossible
9449         situation with a 'throw'.
9450         (*): Update to changes.
9451
9452 2006-04-29  Raja R Harinath  <harinath@gmail.com>
9453
9454         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
9455         Remove 'Undefined'.
9456         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
9457         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
9458         (*): Update to changes.
9459         * statement.cs: Update to changes.
9460
9461 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
9462
9463         A fix for #78049
9464         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
9465
9466 2006-04-28  Raja R Harinath  <harinath@gmail.com>
9467
9468         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
9469         dummy UsageVector.
9470
9471         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
9472         argument to two arguments: an usage-vector and a bool.  Move call
9473         to FlowBranching.Merge () ...
9474         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
9475
9476         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
9477         handling of loop and switch reachability to ...
9478         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
9479
9480 2006-04-27  Raja R Harinath  <harinath@gmail.com>
9481
9482         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
9483         handling to FlowBranchingLoop.InLoop.
9484         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
9485
9486 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
9487
9488         A fix for #78115
9489         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
9490         anonymous method is allowed from AnonymousContainer here.
9491
9492         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
9493
9494 2006-04-24  Raja R Harinath  <rharinath@novell.com>
9495
9496         Fix #78156
9497         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
9498
9499 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
9500
9501         A fix for #49011.
9502         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
9503         (DoubleConstant.Reduce): Ditto.
9504
9505 2006-04-23  Raja R Harinath  <rharinath@novell.com>
9506
9507         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
9508         Remove 'lvalue_right_side' argument.  Move parts to ...
9509         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
9510         (LocalVariable.DoResolveLValue): ... these.
9511
9512 2006-04-21  Raja R Harinath  <rharinath@novell.com>
9513
9514         Fix cs1655.cs
9515         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
9516         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
9517         (LocalVariableReference.DoResolveBase): Use it to implement new
9518         CS1655 check.
9519         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
9520         (Argument.Resolve): Simplify.  Move CS1510 check ...
9521         * ecore.cs (Expression.ResolveLValue): ... here.
9522         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
9523         (PropertyExpr.DoResolveLValue): Likewise.
9524         (FieldExpr.Report_AssignToReadonly): Likewise.
9525         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
9526         LValueMemberAccess or LValueMemberOutAccess on instance depending
9527         on it.
9528         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
9529         DoResolve as appropriate.
9530
9531 2006-04-20  Raja R Harinath  <rharinath@novell.com>
9532
9533         Fix #75800
9534         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
9535         implicit conversions on 'out' and 'ref' arguments.
9536
9537         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
9538         improve clarity.  Remove dead code.
9539
9540         Fix #66031
9541         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
9542         (Catch.Resolve): Resolve VarBlock if it exists.
9543
9544 2006-04-19  Miguel de Icaza  <miguel@novell.com>
9545
9546         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
9547         twice, this was some residual code, the enumerator was emitted
9548         properly in the two branche of if later.
9549
9550 2006-04-19  Raja R Harinath  <rharinath@novell.com>
9551
9552         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
9553         cast is never an lvalue.
9554         (Cast.DoResolve, Cast.ResolveRest): Combine.
9555         (Argument.Emit): Simplify slightly.  Move 'Expr is
9556         IMemoryLocation' check ...
9557         (Argument.Resolve): ... here.
9558         (Argument.Error_LValueRequired): Remove.  Inline into only user.
9559
9560         Simplifications.  Fix cs0191-2.cs
9561         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
9562         CS1649 and CS1651 to ...
9563         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
9564         the actual selection of the error code and message to a lookup
9565         table.  Add a dummy return value to simplify callsites.
9566         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
9567         readonly fields of other instances of the same type.  Move CS0197
9568         warning from ...
9569         * expression.cs (Argument.Resolve): ... here.  Simplify code.
9570         Ensure that ec.InRefOutArgumentResolving is only set during LValue
9571         resolution of an out or ref argument.  The code simplification
9572         above uses this invariant.
9573
9574 2006-04-18  Raja R Harinath  <rharinath@novell.com>
9575
9576         Possibly fix #77752.  Fix cs1690-[4-7].cs.
9577         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
9578         CheckMarshallByRefAccess.  Drop parameter.
9579         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
9580         warning.
9581         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
9582         InstanceExpression.
9583         * report.cs (AllWarnings): Add CS1690.
9584         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
9585         for ref access too.
9586         (LocalVariableReference.DoResolveBase): Update.
9587
9588 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
9589
9590         * class.cs (MethodOrOperator): Moved common parts from method class.
9591         detect obsolete attributes.
9592         (Method.Define): Simplified as it reuses code from base.
9593         (Constructor.ValidAttributeTargets): Fixed issue found during
9594         refactoring.
9595         (Destructor.ValidAttributeTargets): Fixed issue found during
9596         refactoring.
9597         (Operator): Finished refactoring set off by #78020. Operator class is now
9598         ordinary method class.
9599
9600         * anonymous.cs: Updated.
9601
9602         * decl.cs (DeclSpace): Add IsGeneric
9603
9604 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
9605
9606         * class.cs (Constructor.Emit): Don't emit the attributes twice.
9607
9608 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
9609
9610         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
9611         detect obsolete attributes.
9612         (Method.CreateEmitContext): Moved to MethodOrOperator.
9613
9614 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
9615
9616         A fix for #78048.
9617         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
9618         customized exception to make crash detection easier.
9619         (MethodOrOperator): Started to work on new base class for methods and
9620         operators.
9621         (Method): Derives from MethodOrOperator.
9622         (Constructor.Emit): Emits its own attributes.
9623         (AbstractPropertyEventMethod.Emit): Ditto.
9624         (Operator): Derives from MethodOrOperator, will refactor fully in extra
9625         patch.
9626         (Operator.Emit): It's temporary more tricky than should be.
9627         
9628         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
9629
9630         * report.cs (InternalErrorException): Add ctor with inner exception.
9631
9632 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
9633
9634         A fix for #76744.
9635         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
9636         only not visible.
9637
9638 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
9639
9640         A fix for #77916.
9641         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
9642         array.
9643
9644 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
9645
9646         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
9647         attribute is present and Guid not.
9648         (Interface.ApplyAttributeBuilder): Ditto.
9649
9650         * attribute.cs: Add error message.
9651
9652 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
9653
9654         A fix for #78020.
9655
9656         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
9657         sources (it's composite) so hold them in extra array as they are used in
9658         Emit phase only. It worked in the previous versions by mistake.
9659         (Attribute.Emit): Emit attribute for more owners when exist.
9660
9661         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
9662         it has now different behaviour.
9663
9664 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
9665
9666         * constant.cs (Constant.IsDefaultInitializer): New method.
9667
9668         * class.cs: Updated.
9669
9670         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
9671         re-initialize default values. It saves KBs almost for every assembly.
9672         Thanks Zoltan for the idea.
9673         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
9674         (ArrayCreation.DoResolve): Resolve only once.
9675         (ArrayCreation.Emit): Emit static initializer only when it is faster.
9676         (ArrayCreation.GetAttributableValue): Cope with optimized values.
9677
9678 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
9679
9680         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
9681         From #77961.
9682
9683 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
9684
9685         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
9686         in an embedded statement too.
9687
9688 2006-04-01  Raja R Harinath  <rharinath@novell.com>
9689
9690         Fix #77958
9691         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
9692
9693 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
9694
9695         A fix for #77966.
9696
9697         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
9698         was not specified.
9699
9700         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
9701
9702 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
9703
9704         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
9705         phase.
9706
9707         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
9708         LocalTemporary change.
9709
9710         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
9711         TypeContainer.
9712         (ClassOrStruct.DefineFieldInitializers): Implemented static field
9713         initializers optimization.
9714         (ClassOrStruct.TypeAttr): Moved from modifiers.
9715         (Constructor.CheckBase): Don't crash when static ctor has parameters.
9716         (FieldBase.ResolveInitializer): Resolves initializer.
9717         (FieldBase.HasDefaultInitializer): New property.
9718
9719         * cs-parser.jay: Removed message.
9720
9721         * expression.cs (CompilerGeneratedThis): New specialization.
9722
9723         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
9724
9725 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
9726
9727         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
9728
9729 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
9730
9731         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
9732         be now EnumConstants only.
9733
9734 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
9735
9736         * attribute.cs, driver.cs: Reset more caches.
9737
9738 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
9739
9740         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
9741
9742 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
9743
9744         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
9745         for easier reuse. Updated all overrides.
9746         (IntegralConstant): New base class for all integral constants.
9747         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
9748         of the constant range, report custom error.
9749         (UIntConstant.Reduce): Fixed uint conversion.
9750
9751         * ecore.cs, literal.cs: Reduce updates.
9752
9753 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
9754
9755         A fix for #75813.
9756
9757         * class.cs (Constructor.Define): Removed extra if for default ctors.
9758         A patch from Atsushi Enomoto.
9759
9760 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
9761
9762         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
9763         GetAttributableValue.
9764
9765         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
9766         when required.
9767
9768         * convert.cs (ImplicitConversionRequired): Error message moved to
9769         DoubleLiteral.
9770
9771         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
9772         automatic implicit conversion of an output value.
9773         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
9774
9775         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
9776         conversion.
9777         (TypeOf.GetAttributableValue): Add extra handling for object type.
9778
9779         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
9780         special error message.
9781
9782 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
9783
9784         * class.cs (Constructor.Emit): Don't crash when struct ctor is
9785         InternalCall.
9786         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
9787         compatible with MS runtime.
9788
9789 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
9790
9791         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
9792         attribute arguments here.
9793
9794         * class.cs (Indexer.Define): The check was moved to attribute class.
9795
9796 2006-03-22  Marek Safar  <marek.safar@seznam.cz>
9797
9798         * assign.cs, class.cs, codegen.cs, convert.cs, decl.cs, ecore.cs,
9799         expression.cs, typemanager.cs: Minor changes from gmcs to make merging
9800         easier.
9801
9802 2006-03-22  Raja R Harinath  <rharinath@novell.com>
9803
9804         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
9805         mcs to keep code differences small.
9806         * attribute.cs (Attribute.GetParameterDefaultValue): New.
9807         * typemanager.cs (parameter_default_value_attribute_type): New.
9808         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
9809         CS1908 check.
9810
9811 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
9812
9813         * expression.cs (StringConcat.Append): Reverted back to no warning state.
9814
9815 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
9816
9817         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
9818
9819         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
9820         the blocks too.
9821
9822 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
9823
9824         * doc-bootstrap.cs : fix build.
9825
9826 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
9827
9828         * expression.cs (StringConcat.Append): Issue a warning when empty string
9829         is going to append.
9830
9831 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
9832
9833         * assign.cs (CompoundAssign.ResolveSource): Removed.
9834
9835         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
9836         clean up.
9837
9838         * class.cs (TypeContainer.FindMethods): Removed.
9839         (TypeContainer.CheckMemberUsage): Made static.
9840
9841         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
9842
9843         * constant.cs (CheckRange): Removed unused type argument.
9844         (CheckUnsigned): Removed unused type argument.
9845
9846         * cs-parser.jay: Updated after MemberAccess clean up.
9847         Uses Length for empty string test.
9848
9849         * cs-tokenizer.cs: Uses Length for empty string test.
9850         (IsCastToken): Made static.
9851         (is_hex): Made static.
9852         (real_type_suffix): Made static.
9853
9854         * decl.cs (SetupCache): Made static.
9855         (OnGenerateDocComment): Removed unused ds argument.
9856
9857         * delegate.cs (VerifyDelegate): Removed unused argument.
9858
9859         * doc.cs: Uses Length for empty string test.
9860
9861         * driver.cs: Uses Length for empty string test.
9862
9863         * enum.cs (IsValidEnumType): Made static
9864
9865         * expression.cs (EnumLiftUp): Removed unused argument.
9866         (ResolveMethodGroup): Ditto.
9867         (BetterConversion): Ditto.
9868         (GetVarargsTypes): Ditto.
9869         (UpdateIndices): Ditto.
9870         (ValidateInitializers): Ditto.
9871         (MemberAccess.ctor): Ditto.
9872         (GetIndexersForType): Ditto.
9873
9874         * flowanalysis.cs: (MergeFinally): Removed unused argument.
9875
9876         * iterators.cs: Updated after MemberAccess clean up.
9877
9878         * location.cs: Uses Length for empty string test.
9879
9880         * namespace.cs: Uses Length for empty string test.
9881
9882          * report.cs (CheckWarningCode): Made static.
9883
9884         * statement.cs (LabeledStatement): Removed unused argument.
9885
9886         * typemanager.cs (FilterNone): Removed.
9887
9888 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
9889
9890         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
9891         obsolete.
9892
9893         * class.cs: Updated.
9894
9895 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
9896
9897         * cs-parser.jay.cs: __arglist is not allowed for delegates.
9898
9899 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
9900
9901         A fix for #77822.
9902
9903         * expression.cs (VerifyArgumentsCompat): Reverted to double error
9904         reporting, it's more tricky than I thought.
9905
9906 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
9907
9908         A fix for #77816.
9909
9910         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
9911         host container.
9912         (AnonymousMethod.ImplicitStandardConversionExists): New method.
9913         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
9914         Add more error reporting; Fixed issue with params.
9915
9916         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
9917
9918         * cs-parser.jay: AnonymousMethod requires host container.
9919
9920         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
9921
9922 2006-03-18  Raja R Harinath  <harinath@gmail.com>
9923
9924         * class.cs: Change 'TypeContainer ds' constructor argument to
9925         'DeclSpace parent'.  Some classes were missed below due to
9926         different naming convention.
9927
9928         * class.cs (MemberCore.Parent): Delete.  This makes the
9929         ParentContainer changes below enforceable by the compiler.
9930
9931         Treat pointers to enclosing declaration space as 'DeclSpace', not
9932         'TypeContainer'.
9933         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
9934         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
9935
9936         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
9937         of TypeContainer.
9938         (Block.AddThisVariable): Likewise.
9939         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
9940         (AbstractPropertyEventMethod.Emit): Likewise.
9941         (AbstractPropertyEventMethod.EmitMethod): Likewise.
9942         (GetMethod.Define, SetMethod.Define): Likewise.
9943         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
9944         (DelegateMethod.EmitMethod): Likewise.
9945
9946         Fix regression test-partial-13.cs.
9947         Rationalize use of PartialContainer.  Ensure that the partial
9948         class semantics can be tied to type-correctness, i.e., any
9949         violation will cause a compile error.
9950         * class.cs, const.cs: Access all fields that belong to class
9951         TypeContainer via ParentContainer.  Arguments of EmitContexts and
9952         Resolve()-like functions still use 'Parent'.
9953
9954         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
9955         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
9956         (PropertyMethod.CheckModifiers): Remove unused argument.
9957         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
9958         DeclSpace.
9959
9960 2006-03-17  Raja R Harinath  <harinath@gmail.com>
9961
9962         Make semantics of PartialContainer simpler.
9963         * decl.cs (DeclSpace.IsPartial): Remove.
9964         * class.cs (TypeContainer.IsPartial): Likewise.
9965         (TypeContainer..ctor): Set PartialContainer to point to self.
9966         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
9967         (TypeContainer.FindNestedType): Likewise.
9968         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
9969
9970 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
9971
9972         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
9973
9974 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
9975
9976         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
9977         classes.
9978
9979 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
9980
9981         * class.cs (Operator.Define): An error for base conversion was not
9982         reported correctly.
9983
9984 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
9985
9986         * iterator.cs : yield break is allowed in try statement which has
9987           catch clauses. Fixed bug #77767.
9988
9989 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
9990
9991         A fix for #77593, #77574.
9992
9993         * class.cs (MethodCore.CheckBase): Another if for operator.
9994
9995 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
9996
9997         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
9998         were not resolved
9999
10000         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
10001         (DelegateCreation.ImplicitStandardConversionExists): New method for just
10002         conversion test.
10003         
10004         *ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
10005         not needed.
10006
10007         * assign.cs, constant.cs, convert.cs, delegate.cs, expression.cs:
10008         Updated after another emitcontext usage was clean up. It should help us to
10009         synchronize with gmcs easier.
10010
10011 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
10012
10013         A fix for #77353.
10014
10015         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
10016         (Event.Define): ditto
10017         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
10018
10019         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
10020         Removed redundant code and set NewSlot for Invoke method too.
10021
10022         * parameter.cs (Parameters.ctor): Add custom, type ctor.
10023         (Parameters.MergeGenerated): New method. Use this method when you merge
10024         compiler generated argument with user arguments.
10025
10026 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
10027
10028         * attribute.cs (ResolveAsTypeTerminal): Removed.
10029
10030         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
10031         specialization for predefined types; 30% speed up.
10032         Finally placed obsolete check to right place.
10033         (Expression.ResolveType): Removed.
10034
10035         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
10036         Updated after ResolveType was removed.
10037
10038         * expression.cs (Cast.ctor): Check void cast.
10039         (Binary.ResolveAsTypeTerminal): Is never type.
10040         (Conditional.ResolveAsTypeTerminal): Is never type.
10041
10042         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
10043
10044 2006-03-01  Raja R Harinath  <rharinath@novell.com>
10045
10046         Fix #77679.
10047         * expression.cs (ParameterReference.DoResolveBase): Change return
10048         type to bool.
10049         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
10050         Update.
10051
10052         Fix #77628.
10053         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
10054
10055         Fix #77642.
10056         * typemanager.cs (GetFullNameSignature): Don't nullref on
10057         protected accessors.
10058
10059 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
10060
10061         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
10062         these two separated members to simplify the code.
10063         (Attribute.Resolve): Refactored to use new fields and methods.
10064         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
10065         implemented obsolete attribute checking.
10066         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
10067         implemented obsolete checking again. It look line never ending quest ;-)
10068         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
10069
10070         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
10071
10072         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
10073
10074         *class.cs (Property.Define): Add RegisterProperty call.
10075
10076         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
10077         argument groups (only 2).
10078
10079         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
10080         encoding expression to arguments.
10081         (Expression.ExprClassToResolveFlags): Just turned to property.
10082
10083         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
10084         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
10085         optimized as well as implemented support for zero-length attributes.
10086
10087         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
10088         Add caching of PropertyInfo's.
10089
10090 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
10091
10092         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
10093         error multiple times.
10094
10095 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
10096
10097         New partial class implementation.
10098         A fix for #77027, #77029, #77403
10099
10100         * attribute.cs (Attributable): Made attributes protected.
10101
10102         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
10103         the replacements of ClassPart and PartialContainer.
10104         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
10105         (TypeContainer.AddInterface): Ditto.
10106         (TypeContainer.AddPartial): The main method for partial classes. It checks
10107         for errors and merges ModFlags and attributes. At the end class is added to
10108         partial_parts list.
10109         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
10110         required here.
10111         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
10112         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
10113         from the rest of partial classes.
10114         (TypeContainer.GetClassBases): Simplified.
10115         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
10116         DefineType.
10117         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
10118         (TypeContainer.HasExplicitLayout): Uses Flags now.
10119         (PartialContainer): Removed.
10120         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
10121         (StaticClass): Was merged with Class.
10122         (Class.GetClassBases): class and static class bases are verified here.
10123         (Class.TypeAttr): Added static attributes when class is static.
10124         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
10125         (MemberBase): In some cases we need to call parent container for partial
10126         class. It should be eliminated but it's not easy now.
10127
10128         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
10129
10130         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
10131         partial classed to accumulate class comments.
10132         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
10133
10134         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
10135
10136         * driver.cs (MainDriver): Tree.GetDecl was removed.
10137
10138         * modifiers.cs (Modifiers): Add partial modifier.
10139
10140         * tree.cs (Tree.decl): Removed.
10141         (RootTypes): Started to use this class more often for root types
10142         specializations.
10143
10144 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
10145
10146         A fix for #77615
10147
10148         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
10149         external interface does not have an attribute.
10150
10151 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
10152
10153         Another prerequisites for new partial classs implementation.
10154         
10155         * attribute.cs (Attribute.Equal): Implemented.
10156         (Attribute.Emit): Changed as attributes can be applied more than twice.
10157         (Attributes.Emit): Check for duplicate attributes here.
10158
10159         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
10160         as a parameter, clean-up.
10161
10162 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
10163
10164         A fix for #77485
10165
10166         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
10167         contains obsolete attribute check which can in some cases look for base
10168         type of current class which is not initialized yet.
10169         (TypeContainer.BaseType): Replacement of ptype.
10170
10171         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
10172
10173 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
10174
10175         First of prerequisites for new partial classs implemention.
10176         
10177         * attribute.cs (Attributable): Extended by ResolveContext;
10178         Attributes finally have correct context for resolving in all cases.
10179         (AttachTo): Attribute owner is assigned here.
10180
10181         * codegen.cs (IResolveContext): Introduce new interface to hold
10182         all information needed in resolving phase.
10183         (EmitContext): Implements IResolveContext; more clean-up needed here.
10184         
10185         * decl.cs (MemberCore): Implemented IResolveContext.
10186
10187         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
10188         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
10189         parameter.cs, statement.cs, tree.cs, typemanager.cs:
10190         Refactored to use new IResolveContext instead of EmitContext; cleanup
10191
10192 2006-02-06  Miguel de Icaza  <miguel@novell.com>
10193
10194         * codegen.cs (EmitScopeInitFromBlock): check here the
10195         capture_context, there is no need to make two calls to the
10196         EmitContext. 
10197
10198         * anonymous.cs: Add some debugging messages that might help me
10199         track other instances of this problem in the future (the
10200         regression of test 467).
10201
10202         * cs-parser.jay: track the variable block, as we need to initalize
10203         any captured variables declared in this block for the "catch"
10204         portion of the "Try" statement.
10205
10206         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
10207         scope initialization for captured variables. 
10208
10209         Also, move the emit for the variables after the block location has
10210         been marked.
10211
10212 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
10213
10214         * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
10215
10216 2006-02-02  Miguel de Icaza  <miguel@novell.com>
10217
10218         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
10219         commit yesterday, the initialization for the roots is necessary.
10220         What is not necessary is the scope activation.
10221
10222 2006-02-02  Raja R Harinath  <rharinath@novell.com>
10223
10224         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
10225         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
10226         CS0206 checks.
10227         (Argument.Resolve): Remove CS0206 checks.
10228
10229 2006-02-01  Miguel de Icaza  <miguel@novell.com>
10230
10231         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
10232         scopes for all the roots, the scopes will now be emitted when the
10233         Blocks are entered.   [This change was wrong, fixed on 2006-02-02]
10234
10235         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
10236         code.  This reduces a lot of existing cruft.
10237         
10238         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
10239         that the ScopeInfo is generated as we enter the scope, not at the
10240         time of use, which is what we used to do before.
10241
10242         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
10243         every time a Block is about to be emitted if we have a
10244         CaptureContext. 
10245
10246 2006-02-01  Raja R Harinath  <rharinath@novell.com>
10247
10248         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
10249         (Reset): Update.
10250         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
10251
10252         * typemanager.cs (cons_param_array_attribute): Make private.
10253         (Reset): Set it to null.
10254         (InitCoreHelpers): Don't initialize it.
10255         (ConsParamArrayAttribute): New.  Initialize it as needed.
10256         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
10257
10258 2006-01-31  Miguel de Icaza  <miguel@novell.com>
10259
10260         * expression.cs: There might be errors reported during the
10261         selection of applicable methods.  If there are errors, do not
10262         continue execution as it will lead the compiler to crash.
10263
10264 2006-01-30  Miguel de Icaza  <miguel@novell.com>
10265
10266         * expression.cs: Member access is not allowed on anonymous
10267         methods.  Fixes #77402.
10268
10269 2006-01-30  Raja R Harinath  <rharinath@novell.com>
10270
10271         Fix #77401
10272         * cs-parser.jay (VariableDeclaration): Don't set
10273         current_array_type to null.
10274         (field_declaration, event_declaration, declaration_statement):
10275         Set it to null here.
10276
10277 2006-01-28  Raja R Harinath  <harinath@gmail.com>
10278
10279         * typemanager.cs (GenericParameterPosition): New.
10280         * doc.cs: Use it.
10281
10282 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
10283
10284         * doc.cs : To process "include" elements, first we should create
10285           another list than XmlNodeList, because it could result in node
10286           removal, which could result in that the XmlNodeList gives up
10287           yielding next node.
10288
10289           (Also made code identical to gmcs again.)
10290
10291 2006-01-25  Miguel de Icaza  <miguel@novell.com>
10292
10293         * ecore.cs: Introduce an error report that we were not catching
10294         before, if not silent, we must report the error.  Gonzalo ran into
10295         it.
10296
10297 2006-01-23  Miguel de Icaza  <miguel@novell.com>
10298
10299         A fix for bug: #76957
10300         
10301         * iterators.cs (MoveNextMethod.CreateMethodHost): call
10302         ComputeMethodHost before creating the method, this is a new
10303         requirement. 
10304
10305         * anonymous.cs (AnonymousContainer): Now we track all the scopes
10306         that this method references (RegisterScope).  The actual scope
10307         where the method is hosted is computed with the ComputeMethodHost
10308         before we create the method.
10309
10310         Moved the Deepest routine here.
10311
10312         (AnonymousContainer.ComputeMethodHost): New routine used to
10313         compute the proper ScopeInfo that will host the anonymous method.
10314
10315         (ScopeInfo): Deal with multiple roots.  The problem was that we
10316         did not have a unique root where all ScopeInfos could be hanged
10317         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
10318         of roots.  
10319
10320         Remove AdjustMethodScope which is now computed at the end.  Remove
10321         LinkScope which did a partial link, instead link all ScopeInfos
10322         before code generation from the new "LinkScopes" routine. 
10323
10324         Simplify all the Add* routines as they no longer need to maintain
10325         the tree, they just need to record that they are using variables
10326         from a ScopeInfo.
10327
10328         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
10329         routines to produce the forest of ScopeInfo trees.
10330
10331         * class.cs (TypeContainer.AppendMethod): This is just like
10332         AddMethod, but ensures that an interface implementation method
10333         (IEnumerable.XXX) is not inserted at the beginning of the queue of
10334         methods, but at the end.
10335
10336         We use this functionality to ensure that the generated MoveNext
10337         method in the iterator class is resolved/emitted before the
10338         enumerator methods created.   
10339
10340         This is required because the MoveNext method computes the right
10341         ScopeInfo for the method.  And the other methods will eventually
10342         need to resolve and fetch information computed from the anonymous
10343         method. 
10344
10345 2006-01-21  Raja R Harinath  <harinath@gmail.com>
10346             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
10347
10348         Fix rest of #76995.
10349         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
10350         the 'aliases' hash.
10351         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
10352         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
10353
10354 2006-01-18  Raja R Harinath  <rharinath@novell.com>
10355
10356         Fix #76656, cs0231-2.cs.
10357         * cs-parser.jay (formal_parameter_list): Make error case catch
10358         more issues.
10359         (parenthesized_expression_0): Add CS1026 check.
10360         (invocation_expression): Remove unused { $$ = lexer.Location }.
10361
10362 2006-01-17  Raja R Harinath  <rharinath@novell.com>
10363
10364         Fix #76824.
10365         * cs-parser.jay (statement_expression): Don't list out the
10366         individual statement-expressions.  Convert syntax error into
10367         CS0201 check.
10368
10369 2006-01-16  Raja R Harinath  <rharinath@novell.com>
10370
10371         Fix #76874.
10372         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
10373         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
10374         CheckIntermediateModification.
10375         (FieldExpr.DoResolve): Add new two-argument version that
10376         allows us to resolve the InstanceExpression as an lvalue.
10377         The one-argument variant is now just a wrapper.
10378         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
10379         Resolve the lhs as an lvalue if the it has a value type.
10380         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
10381         from Assign.DoResolve.
10382         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
10383         resolved as an lvalue.
10384         (PropertyExpr.DoResolve): Update.
10385         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
10386         has a value type.  Move CS1612 check here from
10387         CheckIntermediateModification.
10388         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
10389         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
10390         'right_side' of a ResolveLValue on an 'out' argument.
10391         (EmptyExpression.LValueMemberAccess): New.  Used as the
10392         'right_side' of a propagated ResolveLValue on a value type.
10393         (LocalVariableReference.DoResolveBase): Recognize
10394         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
10395         Add CS1654 check.
10396         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
10397         EmptyExpression.Null.
10398
10399 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
10400
10401         * typemanager.cs : added IsGenericParameter(). In mcs it always
10402           return false.
10403         * doc.cs : for generic parameters, use GenericParameterPosition,
10404           not FullName.
10405
10406 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
10407
10408         * expression.cs: Fix Console.WriteLine ((this = x).foo);
10409
10410 2006-01-12  Miguel de Icaza  <miguel@novell.com>
10411
10412         This fixes the problem where we used ldfld instead of ldflda to
10413         load the "THIS" pointer on captured parameters, when THIS is a
10414         value type.  See bug #77205.
10415         
10416         * iterators.cs (CapturedThisReference.Emit): Pass false to
10417         EmitThis (we do not need the address).
10418
10419         * codegen.cs (EmitThis): it needs to know whether we need the
10420         address of `this' or not.  This is used by value types.  
10421
10422         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
10423         every other call passes false.
10424
10425 2006-01-12  Raja R Harinath  <rharinath@novell.com>
10426
10427         Fix #77221.
10428         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
10429         GetOverride.
10430         * expression.cs (Invocation.OverloadResolve): Update.
10431         (Invocation.DoResolve): Avoid double resolution of invocation.
10432
10433 2006-01-11  Raja R Harinath  <rharinath@novell.com>
10434
10435         Fix #77180.
10436         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
10437         unary negation of floating point types as 0-expr; negation cannot
10438         overflow in floating point types.
10439
10440         Fix #77204.
10441         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
10442         on operands of 'void' type.
10443
10444         Fix #77200.
10445         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
10446         and ExclusiveOr for boolean constants too.
10447
10448 2006-01-09  Raja R Harinath  <rharinath@novell.com>
10449
10450         Fix #75636.
10451         * expression.cs (Invocation.OverloadResolve): Replace reflected
10452         override methods with their base virtual methods, rather than
10453         skipping over them.
10454         * typemanager.cs (TypeManager.GetOverride): New.
10455
10456 2006-01-05  Jb Evain  <jbevain@gmail.com>
10457
10458         * class.cs (Property.Define, Indexer.Define): do not tag the
10459         properties as SpecialName | RTSpecialName.
10460
10461 2006-01-04  Miguel de Icaza  <miguel@novell.com>
10462
10463         * class.cs (MethodCore.IsDuplicateImplementation): This method was
10464         doing a low-level comparission of parameter types.  It was lacking
10465         a check for __argslist. 
10466
10467 2005-12-30  Miguel de Icaza  <miguel@novell.com>
10468
10469         * expression.cs (ParameterReference.DoResolveBase): Allow
10470         reference parameters if they are local to this block. 
10471
10472         This allows the ref and out parameters of a delegate to be used in
10473         an anonymous method, for example:
10474
10475         delegate void set (out int x);
10476
10477         set s = delegate (out int x){
10478                 x = 0;
10479         };
10480
10481         This is used by functionality introduced late in the C# language.
10482         
10483         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
10484         method that take ref and out parameters. 
10485
10486         Fixes #77119 which was a late change in the spec.
10487
10488 2005-12-23  Miguel de Icaza  <miguel@novell.com>
10489
10490         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
10491         parent if its the same scope.  Fixes #77060.
10492
10493 2005-12-21  Miguel de Icaza  <miguel@novell.com>
10494
10495         * driver.cs: Report the case of no source files and no -out:
10496         argument provided.
10497
10498 2005-12-20  Raja R Harinath  <rharinath@novell.com>
10499
10500         Fix #77035.
10501         * expression.cs (ComposedCast.GetSignatureForError): Define.
10502
10503 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
10504
10505         Fix #76995
10506
10507         * namespace.cs (NamespaceEntry): Add extern_aliases as a
10508         ListDictionary, to contain the ExternAliasEntry entries (in
10509         addition to the NamespaceEntry.aliases hashtable). This field is
10510         shared between the original entry and its doppelganger (bodyless 
10511         copy of it).
10512         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
10513         extern_aliases field.
10514         (NamespaceEntry.Lookup): Move the IsImplicit check after the
10515         lookup in extern_aliases.
10516
10517 2005-12-16  Raja R Harinath  <rharinath@novell.com>
10518
10519         Fix #77006.
10520         * class.cs (TypeContainer.Mark_HasEquals): New.
10521         (TypeContainer.Mark_HasGetHashCode): New.
10522         (ClassPart): Override them.
10523         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
10524
10525         Fix #77008.
10526         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
10527         'parent' argument to the base constructor.
10528
10529         Remove all mention of TypeContainer from decl.cs.
10530         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
10531         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
10532         (DeclSpace.DeclSpace): Likewise.
10533         (DeclSpace.DefineMembers): Remove unused argument.
10534         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
10535         debugging check -- we don't care if the debug code throws an
10536         InvalidCastException instead of an InternalErrorException.
10537         * class.cs (TypeContainer.DefineMembers): Update to changes.
10538         (TypeContainer.DoDefineMembers): Likewise.
10539         (TypeContainer.GetMethods): Likewise.
10540         (PropertyMember.Define): Likewise.
10541         (MemberBase.Parent): New property that forwards to
10542         MemberCore.Parent, but ensures that we get a TypeContainer.
10543         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
10544         (RootContext.PopulateTypes): Likewise.  Remove special case code
10545         for !RootContext.StdLib: DefineMembers is idempotent.
10546
10547 2005-12-14  Miguel de Icaza  <miguel@novell.com>
10548
10549         * convert.cs (ExplicitConversionCore): Check the return value from
10550         ExplicitConversionCore which can return null on failure.  Fixes #76914
10551
10552 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
10553
10554         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
10555
10556 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
10557
10558         * doc.cs : The search for referenced namespace was insufficient to
10559           get global one as it used to do. Fixed bug #76965.
10560
10561 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
10562
10563         * doc.cs : check name in cref in the last phase that whether it is
10564           namespace or not.
10565
10566 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
10567
10568         * cs-tokenizer.cs : reverted the latest change: it somehow broke
10569           Mono.C5.
10570
10571 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
10572
10573         * doc.cs : so it turned out that we cannot skip override check for 
10574           interface members. Fixed bug #76954.
10575
10576 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
10577
10578         * cs-tokenizer.cs : fixed bug #75984:
10579           - #warning and #error should not be handled when the source line
10580             is disabled.
10581           - #line is not checked strictly when the source line is disabled.
10582           - #define and #undef is on the other hand checked strictly at any
10583             state.
10584
10585 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
10586
10587         * cs-tokenizer.cs : missing Location (actually, filename) in one of
10588           CS1027 report.
10589
10590 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
10591
10592         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
10593
10594         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
10595         event initializers.
10596         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
10597         (FieldBase.Initializer): Initializer is now optional.
10598         (EventField.Define): Only event field can have initializer.
10599
10600         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
10601
10602         * const.cs (Const): Reuse initializer.
10603
10604         * cs-parser.jay: Updated after FieldBase changes.
10605         Added current_array_type to simplify array initializers.
10606
10607         * ecore.cs (NullCast.IsDefaultValue): Implemented.
10608
10609         * expression.cs, iterators.cs: Updated.
10610
10611         * namespace.cs (NamespaceEntry): Made UsingFound private.
10612
10613 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
10614
10615         * parameterCollection.cs: Obsolete, removed.
10616         * parser.cs: Obsolete, removed.
10617
10618 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
10619
10620         Fix #76849.
10621         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
10622
10623         * enum.cs (Enum.Define): Set obsolete context here.
10624
10625 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
10626
10627         * doc.cs :
10628           - FindDocumentedMember() now expects 1) paramList as null
10629             when "we don't have to check the number of parameters" and
10630             2) Type.EmptyTypes when "there is no arguments".
10631           - Introduced FoundMember struct to hold the exact type which was
10632             used to find the documented member (the above change broke
10633             test-xml-044; it might be better just to use DeclaringType than
10634             what MS does, like this change does, but it depends on usage.)
10635
10636 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
10637
10638         * doc.cs : documented member might be from DeclaringType for nested
10639           types. Fixed bug #76782.
10640
10641 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
10642
10643         * anonymous.cs: Have the param code handle leaving copies on the
10644         stack etc. Allows anonymous params to take part in the assignment
10645         code (++, +=, etc). Fixes bug #76550
10646
10647         * expression.cs: Handle the prepare_for_load/leave_copy by passing
10648         it down to the anon code.
10649
10650         * iterators.cs: Use dummy var here
10651
10652         * codegen.cs: Handle new vars
10653
10654 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
10655
10656         Fix #76849.
10657         * class.cs (MethodData.Define): Set proper Obsolete context.
10658
10659         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
10660         obsolete context.
10661         (FieldExpr.DoResolve): Ditto.
10662
10663 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
10664
10665         Fix #76849.
10666         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
10667         parent is not obsolete.
10668
10669 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
10670
10671         * doc.cs : (FindDocumentedMember) find parameterless members first
10672           and get CS0419 in the early stage. Fixed first case of bug #76727.
10673
10674 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
10675
10676         Fix #76859.
10677         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
10678         no error was reported.
10679
10680         *expression.cs (Binary.DoResolve): left can be null.
10681
10682 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
10683
10684         Fix #76783.
10685         * class.cs (MethodData.Emit): Parameters should be labeled first.
10686
10687 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
10688
10689         Fix #76761.
10690         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
10691
10692 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
10693
10694         * attribute.cs (AreParametersCompliant): Moved to Parameter.
10695
10696         * class.cs (MethodCore): Parameter clean up.
10697         (IMethodData): Added ParameterInfo.
10698         (MethodData): Parameter clean up.
10699         (Indexer.Define): Parameter clean up.
10700
10701         * anonymous.cs,
10702         * codegen.cs,
10703         * cs-parser.jay,
10704         * decl.cs,
10705         * doc.cs,
10706         * ecore.cs,
10707         * flowanalysis.cs,
10708         * iterators.cs,
10709         * pending.cs,
10710         * statement.cs,
10711         * typemanager.cs: Parameter clean up.
10712
10713         * delegate.cs (Define): Get rid of duplicated code.
10714
10715         * expression.cs (ParameterReference): Removed useless parameters
10716         and simplified.
10717         (Invocation): Ditto.
10718
10719         * parameter.cs (ParamsParameter): New class, params specialization.
10720         (ArglistParameter): Attemp to separate arglist.
10721         (Parameter): Refactored to be reusable and faster.
10722         (Parameter.Modifier): Made understandable.
10723         (Parameters): Changed to be used as a class for `this' assembly
10724         parameters. Refactored to use new specialized classes.
10725
10726         * support.cs (ParameterData): Added Types property.
10727         (InternalParameters): Deleted.
10728
10729 2005-08-20  Martin Baulig  <martin@ximian.com>
10730
10731         Merging this patch from GMCS to fix #75867.
10732
10733         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
10734         scope if we don't already have it.
10735
10736 2005-11-17  Martin Baulig  <martin@ximian.com>
10737
10738         * anonymous.cs
10739         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
10740         inherit the scope from our parent.  Fixes #76653.
10741
10742 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
10743
10744         * doc.cs : the previous patch does not actually fix the bug.
10745           PropertyInfo override check is now implemented and really fixed it.
10746         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
10747
10748 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
10749
10750         * doc.cs : apply "override filter" also to properties.
10751           Fixed bug #76730.
10752
10753 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
10754
10755         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
10756           no need to check overrides. For classes, omit those results from 
10757           interfaces since they must exist in the class. Fixed bug #76726.
10758
10759 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
10760
10761         * typemanager.cs : (GetFullNameSignature) differentiate indexers
10762           with different parameters. Fixed the second problem in #76685.
10763
10764 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
10765
10766         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
10767           get expected 'protected' access in CheckValidFamilyAccess()).
10768           Fixed bug #76692.
10769
10770 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
10771
10772         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
10773           Fixed bug #76705.  CS1569 was incorrectly commented out.
10774
10775 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
10776
10777         * doc.cs : use Invocation.IsOverride() to do real override check.
10778         * expression.cs : made Invocation.IsOverride() internal.
10779
10780 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
10781
10782         * doc.cs : use TypeManager.FindMembers() instead of (possible)
10783           TypeBuilder.FindMembers() and filter overriden base members out.
10784           Fixed bug #76990.
10785
10786 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
10787
10788         * doc.cs : ref/out parameters are represented as '@' (instead of
10789           '&' in type FullName). Fixed bug #76630 (additionally crefs).
10790
10791 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
10792
10793         * doc.cs : when there was no '.' in cref to methods in doc comment,
10794           then parameters were missing in the output. Fixed bug #76691.
10795
10796 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
10797
10798         * driver.cs : don't output docs when there is an error.
10799           Fixed bug #76693.
10800
10801 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
10802
10803         * doc.cs :
10804           Now it should detect indexers. Fixed primary concern in bug #76685.
10805           Fixed CS0419 message to not show the identical member signature in
10806           the message.
10807
10808 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
10809
10810         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
10811           instead of Type.FindMembers() since it does not handle events.
10812           Fixed bug #71604.
10813
10814 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
10815
10816         * codegen.cs: Fixed typo (speficied -> specified).
10817
10818 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
10819
10820         Fix #76369.
10821         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
10822
10823 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
10824
10825         * attribute.cs: Changed error message.
10826
10827         * cs-tokenizer.cs: One more check.
10828
10829 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
10830
10831         * statement.cs (Block.Resolve): Ignore empty statement.
10832
10833 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
10834
10835         * report.cs: Made error/warning methods more strict to avoid
10836         their misuse.
10837
10838         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
10839         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
10840         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
10841         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
10842
10843 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
10844
10845         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
10846         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
10847
10848         * class.cs (TypeContainer.IsComImport): New property.
10849         (Constructor.Define): Create proper ctor for ComImport types.
10850
10851         * expression.cs (New.CheckComImport): Fixed.
10852
10853 2005-11-07  Miguel de Icaza  <miguel@novell.com>
10854
10855         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
10856         that a parameter has been captured does not mean that we do not
10857         have to do the rest of the processing.  This fixes the second part
10858         of #76592.  If there was another anonymous method capturing
10859         values in the past, the Scope would never be set for the second
10860         method that captured the same parameter.
10861
10862         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
10863         properly manipulate the stack.   Second part of fix for #76592.
10864
10865         * expression.cs (New): Add support for invoking "new" on
10866         interfaces that have been flagged with the ComImport attribute and
10867         the CoClass.  Fixes #76637 
10868
10869         * statement.cs (Try.DoEmit): When a variable is captured, do not
10870         try to emit the vi.LocalBuilder variable as it has been captured.
10871         Create a temporary variable and store the results on the
10872         FieldBuilder.  Fixes #76642
10873
10874 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
10875
10876         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
10877
10878         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
10879
10880         * expression.cs (Binary.DoResolve): Added && optimalization.
10881     
10882         * typemanager.cs (AddUserType): Removed useless argument.
10883
10884 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
10885
10886         * statement.cs (Block.variables): Uses ListDictionary.
10887
10888 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
10889
10890         Fix #75969.
10891         * class.cs (PartialContainer.EmitType): Customized to emit
10892         security attributes.
10893         (ClassPart.ApplyAttributeBuilder): Transform security attribute
10894         for partial classes.
10895
10896 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
10897
10898         Fix #76599.
10899         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
10900         access has to be fixed.
10901         
10902         * typemanager.cs (IsUnmanagedType): Wrong common field type.
10903
10904 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
10905
10906         Fix #76590.
10907         * ecore.cs (NullCast.Reduce): Implemented.
10908
10909         * expression.cs (ArrayCreation.CheckIndices): Correcly check
10910         constant type.
10911         
10912         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
10913         properly.
10914         (Foreach.Resolve): Catch null properly.
10915
10916 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
10917  
10918         * cs-tokenizer.cs: Warning text fix.
10919
10920         * driver.cs: AllWarningNumbers exposed on public interface.
10921
10922         * report.cs (): Reviewed warning numbers.
10923         (IsValidWarning): Use binary search.
10924
10925 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
10926  
10927         * driver.cs: Implemeted resource visibility.
10928         (Resources): New class for code sharing between /res: and
10929         /linkres:
10930  
10931 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
10932
10933         Fix #76568.
10934         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
10935         folding.
10936         
10937         * convert (Convert.ImplicitReferenceConversion): NullCast holds
10938         contants only.
10939         
10940         * ecore.cs (NullCast): Child is contant only.
10941         
10942         * literal.cs (NullLiteral.Reduce): null can be converted to any
10943         reference type.
10944
10945 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
10946
10947         * driver.cs: Use Encoding.Default as default code page instead
10948           of ISO-28591.
10949
10950 2005-10-27  Raja R Harinath  <rharinath@novell.com>
10951
10952         Fix #76085.
10953         * expression.cs (Invocation.Error_InvalidArguments): Handle
10954         __arglist parameters.
10955         (Invocation.VerifyArgumentsCompat): Likewise.
10956         * support.cs (ReflectionParameters.GetSignatureForError): Print
10957         __arglist parameters.
10958         (InternalParamters.GetSignatureForError): Likewise.
10959         * parameter.cs (Parameters.GetSignatureForError): Likewise.
10960
10961 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
10962
10963         * attribute.cs (GetPropertyValue): Made public.
10964
10965         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
10966         Resolve.
10967         Add new property WrapNonExceptionThrows to handle 2.0 assembly
10968         attribute.
10969         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
10970         is not defined.
10971         
10972         * driver.cs: Reflect method name change.
10973         
10974         * statement.cs (Try.Resolve): Warn when try has both general
10975         exception handlers.
10976         
10977         * typemanager.cs: runtime_compatibility_attr_type new predefined
10978         type.
10979
10980 2005-10-26  Raja R Harinath  <harinath@gmail.com>
10981
10982         Fix #76419.
10983         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
10984         treat it as an empty parameter list.
10985
10986 2005-10-26  Raja R Harinath  <rharinath@novell.com>
10987
10988         Fix #76271.     
10989         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
10990         ResolveAsTypeStep silent.
10991         * statement.cs (Block.AddConstant): Mark block as used.
10992         (Block.ResolveMeta): Avoid piling on error messages
10993         if a constant initializer resolution fails.
10994
10995 2005-10-25  Raja R Harinath  <rharinath@novell.com>
10996
10997         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
10998         Remove.
10999         (NamespaceEntry.VerifyAllUsing): New.
11000         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
11001         behaviour.  Delegates actual resolution of alias to ...
11002         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
11003         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
11004         Update.
11005         * driver.cs (Driver.MainDriver): Update.
11006         
11007         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
11008         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
11009         property.
11010         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
11011         Remove.
11012         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
11013         RootNamespace.DefineNamespacesForAll.
11014
11015 2005-10-24  Raja R Harinath  <harinath@gmail.com>
11016
11017         * typemanager.cs (assemblies, external_aliases, modules)
11018         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
11019         (ComputeNamespaces, GetRootNamespace): Remove extra staging
11020         overhead.  Move resposibility ...
11021         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
11022         * driver.cs, attribute.cs, codegen.cs: Update to changes.
11023
11024 2005-10-23  Raja R Harinath  <harinath@gmail.com>
11025
11026         * namespace.cs (RootNamespace.all_namespaces): Renamed from
11027         cached_namespaces.  Improve usage.
11028         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
11029         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
11030         Move from GlobalRootNamespace and simplify.
11031         (RootNamespace.Global): Make instance variable.
11032         (RootNamespace.RootNamespace): Add "alias name" parameter.
11033         (GlobalRootNamespace): Simplify drastically.
11034         (Namespace.Lookup): Don't use GetNamespace.
11035         * typemanager.cs (GetRootNamespace): Rename from
11036         ComputeNamespaceForAlias.
11037         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
11038
11039 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
11040
11041         * anonymous.cs (AnonymousContainer): Don't crash when container
11042         doesn't exist.
11043
11044 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
11045
11046         * expression.cs (Binary.DoResolve): Warn when comparing same
11047         values.
11048
11049 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
11050
11051         Fix #76486.
11052         * expression.cs (Binary.DoResolve): It looks like there are no
11053         convetsion rules in enum context.
11054
11055 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
11056
11057         Add support for extern alias qualifiers.
11058         * typemanager.cs: Move some LookupTypeReflection code
11059         to namespace.cs, to have cleaner code. Added some methods
11060         to help us keep track of the extern aliased references.
11061         * driver.cs: Add suport for extern alias assemblies on command
11062         line and check for their warnings/errors. Also keep track of the
11063         extern aliased assemblies.
11064         * namespace.cs: Move the global functionality of Namespace
11065         to GlobalRootNamespace/RootNamespace. Now the global namespace
11066         is GlobalRootNamespace.Globa. Also the code moved from 
11067         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
11068         Finally added LocalAliasEntry (AliasEntry before) and
11069         ExternAliasEntry, to handle alias statements.
11070         * cs-parser.jay: Add support in the grammar for extern alias
11071         statement.
11072         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
11073         Update callings to Namespace (now in GlobalRootNamespace).
11074
11075 2005-10-18  Raja R Harinath  <rharinath@novell.com>
11076
11077         Fix #76371.
11078         * class.cs (TypeContainer.DefineType): Move updating of
11079         topological sort earlier in the code.
11080         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
11081
11082 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
11083
11084         Fix #76273.
11085         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
11086         
11087         * constant.cs (Constant.TryReduce): Moved from Cast class.
11088         (Reduce): Made little bit more OO and fixed missing conversions.
11089         
11090         * ecore.cs (Reduce): Implemented.
11091         (Binary.EnumLiftUp): New method to upgrade values to enum values.
11092         
11093         * literal.cs (Reduce): Implemented.
11094         
11095         * class.cs: Reverted Miguel's wrong commit.
11096
11097 2005-10-14  Miguel de Icaza  <miguel@novell.com>
11098
11099         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
11100
11101 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
11102
11103         * cs-parser.jay, expression.cs : CS0214 was missing error location
11104           for constants. Fixed bug #76404.
11105
11106 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
11107
11108         Fix #76370.
11109         * convert.cs (ExplicitConversionCore): Fixed object->enum
11110         conversion.
11111
11112 2005-10-10  Raja R Harinath  <rharinath@novell.com>
11113
11114         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
11115         InstanceExpression.
11116         (PropertyExpr.EmitCall): Likewise.
11117         * expression.cs (Invocation.EmitArguments): Handle case where
11118         arguments == null.
11119         (Invocation.EmitCall): Avoid allocating temporary variable if
11120         there are no arguments.
11121
11122 2005-10-07  Raja R Harinath  <rharinath@novell.com>
11123
11124         Fix #76323.
11125         * convert.cs (ImplicitConversionStandard): Move conversion of
11126         void* to arbitrary pointer types ...
11127         (ExplicitConversionStandard): .. here.
11128         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
11129         error to always print typenames.
11130
11131 2005-10-07  Raja R Harinath  <rharinath@novell.com>
11132
11133         * convert.cs (GetConversionOperator): Rename from
11134         GetConversionOperators.  Move operator selection code from ...
11135         (UserDefinedConversion): ... here.
11136
11137 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
11138
11139         * convert.cs (ExplicitConversionCore): Removed duplicate enum
11140         conversion.
11141
11142 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
11143
11144         * assign.cs (Assign.DoResolve): Error method changed.
11145
11146         * cfold.cs (DoConstantNumericPromotions): Error method changed.
11147         
11148         * const.cs (ResolveValue): Reset in_transit immediately.
11149         
11150         * constant.cs: Error method changed.
11151         
11152         * convert.cs: Removed useless location parameter.
11153         (ExplicitNumericConversion): Don't do double enum check.
11154         (ExplicitConversionCore): Renamed from ExplicitConversion.
11155         (ExplicitUnsafe): Extracted from ExplicitConversion.
11156         (ExplicitConversion): Uses for error reporting.
11157         
11158         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
11159         error messages.
11160         (ResolveBoolean): Uses common error method.
11161         (CastToDecimal): Get rid of ec.
11162         (CastFromDecimal): Optimized.
11163         (ConvCast): Get rid of ec.
11164         
11165         * enum.cs (ResolveValue): Reset in_transit immediately.
11166         (Emit): Return after first error.
11167         
11168         * expression.cs: Convert changes.
11169         
11170         * literal.cs: Error method changed.
11171         
11172         * statement.cs: Error method changed.
11173
11174 2005-10-03  Raja R Harinath  <rharinath@novell.com>
11175
11176         * support.cs (SeekableStreamReader.Position): Don't error out when
11177         the requested position is just beyond the end of the current
11178         buffered data.
11179
11180 2005-09-28  Raja R Harinath  <rharinath@novell.com>
11181
11182         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
11183         try to keep in sync with the byte count of the underlying Stream.
11184         However, this limits us to a window size of 2048 characters: i.e.,
11185         the maximum lookahead of our lexer/parser can be 2048 characters.
11186
11187 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
11188
11189         Fix #76255.
11190         * driver.cs: Fix compilation files with full root path.
11191
11192 2005-09-25  Miguel de Icaza  <miguel@novell.com>
11193
11194         * report.cs (SymbolRelatedToPreviousError): Format the output so
11195         it does not use an open parenthesis that is never closed. 
11196
11197         * driver.cs: Follow coding guidelines
11198
11199 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
11200
11201         Fix #72930.
11202         * const.cs (Const.ResolveValue): Check for assigning non-null
11203         value to reference type.
11204
11205 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
11206
11207         * anonymous.cs: Implemented ExprClassName.
11208         
11209         * assign.cs (Assign.DoResolve): Don't chrash when type is not
11210         delegate.
11211         
11212         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
11213         check.
11214         
11215         * class.cs (StaticClass.DefineContainerMembers): Report protected
11216         members as error.
11217         
11218         * codegen.cs: if(ed) PRODUCTION.
11219         
11220         * convert.cs (Error_CannotImplicitConversion): Better error
11221         distinction.
11222         
11223         * cs-parser.jay: More error checks.
11224         
11225         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
11226         
11227         * driver.cs (CSCParseOption): Enabled wrong option check.
11228         
11229         * ecore.cs (Expression.ExprClassName): Turned to property.
11230         (MemberExpr.CheckIntermediateModification): For checking boxed
11231         value types     modification.
11232         
11233         * statement.cs (Fixed.Resolve): Expression type must be
11234         convertible to fixed type.
11235         (CollectionForeach.GetEnumeratorFilter,TryType):
11236         Small refactoring for easier error checking.
11237
11238 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
11239
11240         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
11241         attributes.
11242         
11243         * class.cs (GeneratedBaseInitializer): New class for customization
11244         compiler generated initializers.
11245         (MemberBase.DoDefine): Check Obsolete attribute here.
11246         (FieldMember.DoDefine): Ditto.
11247         
11248         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
11249         constants.
11250         
11251         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
11252         (MemberCore.GetObsoleteAttribute): Removed argument.
11253         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
11254         (MemberCore.CheckObsoleteType): New helper.
11255         
11256         * delegate.cs,
11257         * enum.cs,
11258         * statement.cs: Updates after MemberCore changes.
11259         
11260         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
11261         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
11262         
11263         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
11264         obsolete attribute for compiler construct.
11265         (As.DoResolve): Cache result.
11266         
11267         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
11268
11269 2005-09-26  Raja R Harinath  <rharinath@novell.com>
11270
11271         Fix #76133.
11272         * expression.cs (This.VerifyFixed): In a value type T, the type of
11273         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
11274         value type R, 'this' is treated as a value parameter.
11275
11276 2005-09-22  Miguel de Icaza  <miguel@novell.com>
11277
11278         * statement.cs (Lock): Use the TemporaryVariable class instead of
11279         manually using local variables as those do not work when variables
11280         are captured.
11281
11282         * ecore.cs: Moved the TemporaryVariable class from being a nested
11283         class inside Foreach to be a public class that can be employed in
11284         other places. 
11285
11286 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
11287
11288         * cs-parser.jay: interface_accessors replaced by
11289         accessor_declarations.
11290
11291         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
11292         location.
11293         
11294         * statement.cs (GotoCase.Resolve): Convert null constant to
11295         null case.
11296         (SwitchLabel.ResolveAndReduce): Ditto.
11297         (SwitchLabel.NullStringCase): Custom null stamp.
11298         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
11299         
11300         typemanager.cs (CSharpSignature): Don't skip first argument
11301         for full names.
11302
11303 2005-09-18  Miguel de Icaza  <miguel@novell.com>
11304
11305         * driver.cs: Set InEmacs based on the environment variable EMACS. 
11306
11307         * location.cs (InEmacs): in this mode, do not report column
11308         location as it confuses Emacs.
11309
11310 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
11311
11312         * cfold.cs, constant.cs, convert.cs, ecore.cs,
11313         expression.cs, iterators.cs, literal.cs: Store constants and
11314         literals location.
11315         
11316         * class.cs (MemberBase.ShortName): Pass location.
11317         
11318         * cs-parser.jay: Some location fixes.
11319         
11320         * ecore.cs (Expression.Location): Made virtual.
11321
11322 2005-09-05  Miguel de Icaza  <miguel@novell.com>
11323
11324         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
11325         if the underlying types are the same, otherwise we need to produce
11326         code that will do the proper cast.
11327
11328         This was exposed by Marek's constant rewrite which produced
11329         invalid code for the call site:
11330
11331         enum X : long { a }
11332         void Method (X v) {}
11333
11334         Method ((X) 5)
11335
11336         This fixes test-49.cs
11337
11338 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
11339
11340         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
11341           Type/Object should be allowed as well. Fixed bug #75968.
11342
11343 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
11344
11345         * expression.cs : (Binary.DoResolve): when one is enum constant and
11346           another is constant 0, then return enum one *as enum type*.
11347           Fixed bug 74846.
11348
11349 2005-09-02  Raja R Harinath  <rharinath@novell.com>
11350
11351         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
11352         internal.
11353
11354         Fix #75941.
11355         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
11356         flow-branching for LocalVariableReferences in case we were invoked
11357         from a MemberAccess.
11358         * expression.cs (LocalVariableReference.VerifyAssigned): New.
11359         Carved out of ...
11360         (LocalVariableReference.DoResolveBase): ... this.
11361         (MemberAccess.Resolve): Do the check that was disabled during
11362         SimpleNameResolve.
11363
11364 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
11365
11366         * class.cs :
11367           (PartialContainer.Create): check abstract/sealed/static strictly
11368           but abstract/sealed can exist only at one side. Fixed bug #75883.
11369
11370 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
11371
11372         Fix #75945.
11373         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
11374         specified, don't default to UnmanagedType.I4.
11375
11376 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
11377
11378         * expression.cs : conditional operator should check possibly
11379           incorrect assign expression. Fixed bug #75946.
11380
11381 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
11382
11383         * cs-tokenizer.cs, cs-parser.jay, driver.cs, support.cs :
11384           Reverting the change. gmcs is much complex than mcs on this matter.
11385
11386 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
11387
11388         * cs-tokenizer.cs : To read another token ahead of the actual 
11389           consumption, use new SavedToken and cache token instead of moving
11390           back the stream with SeekableStreamReader (it seemed problematic).
11391         * cs-parser.jay,
11392           driver.cs : Thus use StreamReader directly.
11393         * support.cs : Thus removed SeekableStreamReader.
11394
11395 2005-08-30  Raja R Harinath  <rharinath@novell.com>
11396
11397         Fix #75934.
11398         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
11399         (ScopeInfo.EmitScopeType): Use it to construct field names from
11400         names of captured locals.
11401
11402         Fix #75929.
11403         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
11404         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
11405         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
11406         (ExplicitConversion): Remove enum cases already handled by
11407         implicit conversion.  Move implicit conversion check to the beginning.
11408         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
11409         * expression.cs (ArrayCreation.EmitDynamicInitializers):
11410         Don't treat System.Enum as a struct.
11411
11412 2005-08-30  Jb Evain  <jbevain@gmail.com>
11413
11414         * attribute.cs: handles as expression in parameters.
11415
11416 2005-08-30  Raja R Harinath  <rharinath@novell.com>
11417
11418         Fix #75802.
11419         * class.cs (TypeContainer.VerifyClsName): Don't use a
11420         PartialContainer when verifying CLS compliance.
11421         (AbstractPropertyEventMethod): Set Parent here, ...
11422         (PropertyMethod): ... not here.
11423
11424 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
11425
11426         * attribute.cs : escaped attribute name should not be allowed to be
11427           resolved (e.g. @class as classAttribute). Fixed bug #75930.
11428
11429 2005-08-29  Raja R Harinath  <rharinath@novell.com>
11430
11431         Fix #75927.
11432         * convert.cs (ImplicitStandardConversionExists): Allow zero also
11433         when converting a long constant to unsigned long.
11434         * expression.cs (Invocation.OverloadResolve): Add sanity check to
11435         detect where IsApplicable and VerifyArgumentsCompat disagree.
11436
11437 2005-08-29  Raja R Harinath  <rharinath@novell.com>
11438         and Carlos Alberto Cortez  <carlos@unixmexico.org>
11439
11440         Fix #75848.
11441         * class.cs (TypeContainer.CanElideInitializer): New helper.
11442         (TypeContainer.EmitFieldInitializers): Use it to determine if we
11443         can safely emitting the initializer of a field.
11444
11445 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
11446
11447         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
11448           allowed inside a switch (without loop). Fixed bug #75433.
11449
11450 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
11451
11452         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
11453         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
11454
11455 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
11456
11457         * driver.cs : kinda reverting the default encoding changes (not exact 
11458           revert since I noticed that "codepage:reset" might not work fine).
11459
11460 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
11461
11462         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
11463           Location. Now getter and setter store location correctly.
11464           (errors/cs0111-12.cs now reports the expected location.)
11465
11466 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
11467
11468         * driver.cs : Use default encoding on the environment.
11469           Removed (now that) extra parameter for SeekableStreamReader.
11470         * support.cs : (SeekableStreamReader) third .ctor() argument for
11471           StreamReader is not required (always true). preamble size could
11472           be acquired in simpler and safe way.
11473
11474 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
11475
11476         * cs-parser.jay: report CS0642 at warning level 3
11477           and report CS0642 for an if else statement also
11478           fixes bug #74745. Patch by John Luke (and a bit
11479           modified by me).
11480           Removed extra CS0642 warning check for "while",
11481           "for" and "fixed".
11482         * statement.cs: In Block.Resolve(), CS0642 check
11483           is reimplemented to check a sequence of an empty
11484           statement and a block.
11485
11486           Both fix bug #66777.
11487
11488 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
11489
11490         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
11491         detection until I fix it.
11492         
11493         * cs-tokenizer.cs: Changed error message.
11494         
11495         * cs-parser.jay: Fixed 2 error locations.
11496         
11497         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
11498         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
11499         properties.
11500         
11501         * enum.cs (GetSignatureForError): Fixed.
11502         
11503         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
11504         method detection.
11505         
11506         * class.cs,
11507         * typemanager.cs (RegisterProperty): Removed.
11508         
11509         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
11510
11511 2005-08-24  Raja R Harinath  <rharinath@novell.com>
11512
11513         Fix #75874.
11514         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
11515         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
11516
11517 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
11518
11519         * expression.cs : tiny fix is required for not warning positive ulong.
11520           See test-441.cs.
11521
11522 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
11523
11524         * expression.cs : add CS0652 check for constant and integral
11525           expression. Fixed bug #53974.
11526
11527 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
11528
11529         * expression.cs : in DoNumericPromotions(), check if there is implicit
11530           conversion overload for string (to check CS0034). Fixed bug #52492.
11531
11532 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
11533
11534         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
11535
11536 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
11537
11538         * ecore.cs : report location when it is *not* Null.
11539
11540 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
11541
11542         * codegen.cs,
11543           ecore.cs,
11544           flowanalysis.cs,
11545           expression.cs:
11546           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
11547           correctly. Fixed bug #75721.
11548
11549 2005-08-23  Raja R Harinath  <rharinath@novell.com>
11550
11551         * support.cs (SeekableStreamReader.Position): Avoid an expensive
11552         loop that performs 'min (pos, char_count)'.
11553
11554         Fix #75862.
11555         * expression.cs (Unary.ResolveOperator): Don't discard implicit
11556         converted value in Operator.OnesComplement.
11557
11558 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
11559
11560         * anonymous.cs: If the anon method is pulled into a helper class,
11561         it needs to be `internal' not `private'. Fixes runtime behavior on
11562         msft. bug #75704
11563
11564 2005-08-20  Martin Baulig  <martin@ximian.com>
11565
11566         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
11567         scope if we don't already have it.
11568
11569         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
11570         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
11571         fixes #75867.
11572
11573 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
11574
11575         Fix #75803
11576         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
11577         is a partial class.
11578
11579 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
11580
11581         The big constants rewrite
11582         Fix #75746, #75685 and more
11583         As a side effect saved 1MB for MWF ;-)
11584         
11585         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
11586         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
11587         enum based for corlib compilation.
11588         
11589         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
11590         subtractions.
11591         
11592         * class.cs (FixedField.Define): Use ResolveAsConstant.
11593         
11594         * const.cs (IConstant): Interface constants and enums.
11595         (Const.ResolveValue): New method for constant resolvning.
11596         (ExternalConstant): Constants from imported assemblies.
11597         
11598         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
11599         conversion; like enums.
11600         (Constant.ToType): Converts this constant to different type.
11601         (Constant.Increment): Adds 1.
11602         
11603         * convert.cs (ImplicitConversionRequired): Simplified.
11604         
11605         * cs-parser.jay: Create EnumMember directly.
11606         
11607         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
11608         
11609         * doc.cs (GenerateEnumDocComment): Removed.
11610         
11611         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
11612         (ConvertIntLiteral): Removed.
11613         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
11614         
11615         * enum.cs (EnumMember): Implement IConstant.
11616         (Enum.IsValidEnumConstant): Removed.
11617         (Enum.GetNextDefaultValue): Removed.
11618         (Enum.FindMembers): Updated.
11619         (Enum.GenerateDocComment): Iterate enum members.
11620         
11621         * expression.cs (Cast.TryReduce): Handle enums correctly.
11622         (New.Constantify): Made public.
11623         (MemberAccess.DoResolve): Removed contant specific if(s).
11624         
11625         * literal.cs (NullLiteral): Implement new abstract methods.
11626         
11627         * statement.cs (GotoCase.Resolve): Use new constant methods.
11628         (SwitchLabel.ResolveAndReduce): Use new constant methods.
11629         
11630         * typemanager.cs (LookupEnum): Removed.
11631         (IsEnumType): Fixed to work with corlib.
11632         (RegisterConstant): Removed.
11633         (LookupConstant): Removed.
11634         (GetConstant): Changed to work with IConstant.
11635
11636 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
11637
11638         * location.cs : Fixed overflown (>255) column number.
11639
11640 2005-08-03  Raja R Harinath  <rharinath@novell.com>
11641
11642         First cut of the qualified-alias-member feature.
11643         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
11644         token.
11645         * cs-parser.jay (DOUBLE_COLON): New token.
11646         (namespace_or_type_name): Add rule for recognizing
11647         qualified-alias-members.
11648         (primary_expression): Likewise.
11649         (element_access): Allow QualifiedAliasMember as a possible
11650         type-bearing expression.
11651         (local_variable_type, local_variable_pointer_type): Likewise.
11652         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
11653         aliases in the current and enclosing namespace declarations.
11654         (NamespaceEntry.UsingAlias): Add CS0440 warning.
11655         * decl.cs (MemberName.is_double_colon): New.
11656         (MemberName.MemberName): Add new constructor for alias-member.
11657         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
11658         * expression.cs (QualifiedAliasMember): New expression type.
11659
11660 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
11661
11662         * location.cs : it borked when no argument was specified.
11663
11664 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
11665
11666         * location.cs : tiny ToString() format fix.
11667
11668 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
11669
11670         * statement.cs : oops, it was missing.
11671
11672 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
11673
11674         A set of fixes for precise line/column location.
11675
11676         * location.cs :
11677           "token" field now holds a file/line "delta", a line number offset 
11678           from the segment, and a column number. See also:
11679           http://lists.ximian.com/pipermail/mono-devel-list/2004-
11680           December/009508.html
11681           Removed static IsNull. Use instance IsNull property instead.
11682         * cs-tokenizer.cs :
11683           For some tokens it stores Location. For Identifier it stores
11684           LocatedToken which is a pair of string name and location.
11685           Column numbers are adjusted only at getChar().
11686         * report.cs :
11687           Use Location.ToString() for reporting (it now contains column).
11688         * cs-parser.jay :
11689           Largely modified to use LocatedToken instead of
11690           string (IDENTIFIER), and to acquire Location from some tokens.
11691         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
11692           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
11693           codegen.cs :
11694           Now MemberName holds Location. DeclSpace.ctor() receives Location
11695           as a parameter. Removed extra parameters to all derived classes.
11696           Replaced Location.IsNull() with instance property.
11697         * assign.cs, expression.cs :
11698           Added .ctor() overload that omits Location.
11699         * attribute.cs :
11700           Added "nameEscaped" flag that indicates the identifier was escaped
11701           in the source file. This fixes bug #57047.
11702
11703 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
11704
11705         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
11706         New method, looking for lo-case imported cls type.
11707
11708         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
11709         here.
11710
11711         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
11712
11713         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
11714
11715         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
11716         all_imported_types.
11717         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
11718
11719         Optimized to save 3.5 MB for SWF compilation.
11720
11721 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
11722
11723         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
11724         (PartialContainer.Create): Moved logic AddToContainer.
11725         (PartialContainer.MarkForDuplicationCheck): Shares name.
11726         
11727         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
11728         place.
11729         
11730         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
11731         initialization.
11732         (Namespace.GetSignatureForError): New method.
11733         
11734         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
11735         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
11736
11737 2005-08-01  Raja R Harinath  <rharinath@novell.com>
11738
11739         Fix #75669.
11740         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
11741         member lookup rather than qualifier_type, since qualifier_type can
11742         be null.
11743
11744 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
11745
11746         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
11747         enum member.
11748
11749 2005-07-31  Miguel de Icaza  <miguel@novell.com>
11750
11751         * statement.cs: Copy the local exception into the exception
11752         captured local.  Fixes 75674
11753
11754 2005-07-31  Raja R Harinath  <harinath@gmail.com>
11755
11756         Fix #75658.
11757         * expression.cs (Invocation.OverloadResolve): Don't report error
11758         CS1501 if error CS1502 has been reported.
11759         (New.DoResolve): Delegate CS1501 reporting to
11760         Invocation.OverloadResolve.
11761
11762         Fix #75656.
11763         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
11764         invariant-meaning-in-block property in an enclosing block if
11765         necessary.
11766
11767 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
11768
11769         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
11770         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
11771         (Switch.CheckSwitch): Just save 50kb for SWF.
11772
11773 2005-07-27  Martin Baulig  <martin@ximian.com>
11774
11775         * anonymous.cs (CaptureContext.AddField): Added
11776         `AnonymousContainer am' argument; compute its toplevel scope if
11777         it's not already computed.  Fixes #75649.
11778
11779 2005-07-26  Raja R Harinath  <rharinath@novell.com>
11780
11781         Fix #75628.
11782         * class.cs (Constructor.Emit): Reset block to null if the block
11783         resolve fails.
11784
11785 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
11786
11787         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
11788
11789 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
11790
11791         * class.cs (MethodData.Define): Check whether accessor implementing
11792         interface is public.
11793
11794         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
11795
11796 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
11797
11798         Fix #57245
11799         * namespace.cs (LookupType): Moved same type check to...
11800         
11801         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
11802         with the same name.
11803
11804 2005-07-21  Raja R Harinath  <rharinath@novell.com>
11805
11806         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
11807         already found a typebuilder.
11808         * class.cs (MethodCore.IsDuplicateImplementation): Compare
11809         MemberNames, not strings.
11810
11811         * const.cs (Error_ExpressionMustBeConst): 
11812         Rename from Error_EpressionMustBeConst.
11813         * const.cs, class.cs, statement.cd: Update.
11814
11815 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
11816
11817         Fix #65573
11818
11819         * const.cs (Const.LookupConstantValue): Report missing contant expression
11820         everytime.
11821         (Error_EpressionMustBeConstant): Only one error method.
11822
11823         * class.cs, statement.c: Updated.
11824
11825 2005-07-20  Raja R Harinath  <rharinath@novell.com>
11826
11827         * statement.cs (Block.Flags): Add back HasVarargs.
11828         (Block.flags): Make protected.
11829         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
11830
11831         * typemanager.cs (types, typecontainers, user_types): Remove.
11832         (UserTypes, TypeContainers): Likewise.
11833         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
11834         (CleanUp, Reset): Update.
11835         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
11836         (GetNestedType): Use Type.GetNestedType.
11837         (CoreLookupType): Take two arguments, the namespace and the
11838         basename of the type.  Update to use the Namespace.Lookup
11839         mechanism.
11840         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
11841         (RealMemberLookup): Use IsNestedChildOf instead of playing with
11842         string concatenation and substring matches.
11843         * class.cs, enum.cs, delegate.cs: Update to changes.
11844
11845 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
11846
11847         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
11848         Expression and made virtual.
11849
11850         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
11851         (ImplicitStandardConversionExists): Fixed `byte' typo ?
11852
11853         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
11854
11855         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
11856         error message.
11857
11858         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
11859         change.
11860
11861 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
11862
11863         Fix #57707
11864         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
11865         AssemblyCultureAttribute is not used on executable.
11866
11867         * rootcontext.cs,
11868         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
11869
11870 2005-07-16  Raja R Harinath  <rharinath@novell.com>
11871
11872         Fix #60638.
11873         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
11874         New.  Reports CS0252/CS0253.
11875         Mostly taken from preliminary patch by Duncak Mak.
11876         (Binary.DoResolveOperator): Store results of operator lookup.
11877         Use them to detect if we need to warn about unintended reference
11878         comparisons.
11879
11880 2005-07-15  Raja R Harinath  <rharinath@novell.com>
11881
11882         Fix #72969.
11883         * namespace.cs (Namespace.Lookup): Add back location parameter.
11884         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
11885         * delegate.cs, ecore.cs, expression.cs: Update to changes.
11886
11887         * codegen.cs (EmitContext.DeclSpace): Make readonly.
11888         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
11889         (Namespace.LookupType): ... this.
11890         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
11891         of namespaces.
11892         * typemanager.cs (LookupTypeReflection): Remove buggy code that
11893         purported to handle pointers.
11894         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
11895         CoreLookupType.
11896
11897 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
11898
11899         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
11900         type as namespace.
11901
11902 2005-07-15  Raja R Harinath  <rharinath@novell.com>
11903
11904         * namespace.cs (Namespace.Lookup): Drop location parameter.
11905         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
11906         (NamespaceEntry.Lookup): ... this.
11907         (NamespaceEntry.Error_AmbiguousTypeReference):
11908         Move here from DeclSpace.
11909         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
11910         names ...
11911         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
11912         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
11913         Move to NamespaceEntry.
11914         * delegate.cs, expression.cs: Update to changes.
11915
11916 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
11917
11918         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
11919         CheckAttributeType and refactored.
11920         (Attribute.ResolvePossibleAttributeType): Changed to reuse
11921         ResolveAsTypeTerminal error handling.
11922         (ResolveAsTypeTerminal): Introduced because of global attributes extra
11923         handling.
11924         (GetSignatureForError): Print errors in same way.
11925
11926         * class.cs,
11927         * codegen.cs: Reflect attribute GetSignatureForError change.
11928
11929         * ecore.cs,
11930         * expression.cs: Add silent parameter to ResolveAsTypeStep.
11931
11932         * namespace.cs (UsingEntry): Refactored to make fields private.
11933
11934         * assign.cs,
11935         statement.cs: Error_UnexpectedKind has extra parameter.
11936
11937 2005-07-14  Raja R Harinath  <rharinath@novell.com>
11938
11939         * ecore.cs (IAlias): Remove.
11940         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
11941         that implement the interface.
11942         * namespace.cs (Namespace): Likewise.
11943         (Namespace.declspaces): Renamed from 'defined_names'.
11944         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
11945         DeclSpace instead of an IAlias.
11946         * tree.cs (Tree.AddDecl): Update.
11947
11948 2005-07-12  Raja R Harinath  <rharinath@novell.com>
11949
11950         * statement.cs (Block.Flags); Remove HasVarargs.
11951         (Block.HasVarargs): Move to ToplevelBlock.
11952         (Block.ThisVariable, Block.AddThisVariable): Likewise.
11953         (Block.Variables): Make protected.  Initialize variable hashtable
11954         if necessary.
11955         (Block.AddVariable): Update.
11956         (Block.Resolve): Update to changes.
11957         (ToplevelBlock.HasVarargs): New boolean.
11958         (ToplevelBlock.ThisVariable): Move here from Block.
11959         (ToplevelBlock.AddThisVariable): Likewise.
11960         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
11961         * expression.cs (This.ResolveBase): Update to changes.
11962         (ArglistAccess.DoResolve): Likewise.
11963
11964 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
11965
11966         Fix #75321
11967         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
11968
11969         * class.cs (TypeContainer.VerifyMembers): Distinguish between
11970         not used and not used & assigned.
11971         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
11972
11973 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
11974
11975         Fix #75053
11976         * expression.cs (Is.DoResolve): null is never provided type.
11977
11978 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
11979
11980         Fix #52496
11981         * cs-parser.jay: Less strict event error rule to catch more errors.
11982
11983 2005-07-08  Martin Baulig  <martin@ximian.com>
11984
11985         Fix test-iter-10.cs - distinguish whether we `yield' in a property
11986         gettter (allowed) or setter (not allowed).
11987
11988         * class.cs (Accessor): Implement IIteratorContainer.
11989         (Accessor.Yields): New public field.
11990         (PropertyBase.PropertyMethod.Define): Handle iterators on a
11991         per-accessor basis.
11992
11993         * cs-parser.jay
11994         (get_accessor_declaration, set_accessor_declaration): Set the
11995         `yields' flag on the accessor, not the property.
11996         (property_declaration): Do the iterators check on a per-accessor
11997         basis and not for the whole property.
11998
11999 2005-07-08  Martin Baulig  <martin@ximian.com>
12000
12001         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
12002         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
12003
12004 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
12005
12006         Fix #74975
12007         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
12008         (ExtractSecurityPermissionSet): Cope with self referencing security
12009         attributes properly.
12010
12011         * driver.cs (SetOutputFile): Made public property OutputFile.
12012
12013 2005-07-07  Raja R Harinath  <rharinath@novell.com>
12014
12015         Fix #75486.
12016         * class.cs (TypeContainer.first_nonstatic_field): Rename from
12017         has_nonstatic_fields.  Make into a FieldBase pointer.
12018         (TypeContainer.AddField): Add CS0282 check.
12019         (TypeContainer.EmitType): Update.
12020
12021 2005-07-06  Miguel de Icaza  <miguel@novell.com>
12022
12023         * cs-tokenizer.cs (consume_identifier): Do not create strings to
12024         compare if they start with __.
12025
12026 2005-07-06  Raja R Harinath  <rharinath@novell.com>
12027
12028         * statement.cs (Switch.SwitchGoverningType): Only look at
12029         UserCasts that don't need implicit standard conversions to one of
12030         the allowed switch types (Fixes test-322.cs).
12031         (LocalInfo.Resolve): Re-enable sanity-test.
12032
12033 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
12034
12035         * cs-tokenizer.cs (consume_identifier): Detect double undescores
12036         
12037         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
12038         
12039         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
12040
12041 2005-07-06  Raja R Harinath  <rharinath@novell.com>
12042
12043         Fix #75472.
12044         * ecore.cs (SimpleName.GetSignatureForError): Add.
12045         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
12046         (MemberAccess.GetSignatureForError): Add.
12047
12048 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
12049  
12050         The big error and warning messages review.
12051         
12052         * anonymous.cs,
12053         * assign.cs,
12054         * attribute.cs,
12055         * class.cs,
12056         * codegen.cs,
12057         * convert.cs,
12058         * cs-parser.jay,
12059         * cs-tokenizer.cs,
12060         * decl.cs,
12061         * delegate.cs,
12062         * doc.cs,
12063         * driver.cs,
12064         * ecore.cs,
12065         * enum.cs,
12066         * expression.cs,
12067         * flowanalysis.cs,
12068         * iterators.cs,
12069         * literal.cs,
12070         * location.cs,
12071         * modifiers.cs,
12072         * namespace.cs,
12073         * parameter.cs,
12074         * pending.cs,
12075         * report.cs,
12076         * rootcontext.cs,
12077         * statement.cs,
12078         * support.cs,
12079         * tree.cs,
12080         * typemanager.cs: Updated.
12081         
12082         * class.cs: (MethodCore.SetYields): Moved here to share.
12083         (PropertyMethod.Define): Moved iterator setup here.
12084         
12085         * iterators.cs: Add orig_method to have full access to parent
12086         container.
12087
12088 2005-07-05  Raja R Harinath  <rharinath@novell.com>
12089
12090         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
12091         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
12092         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
12093         variable of struct type.
12094         * expression.cs (Unary.ResolveOperator): Update to change.
12095         (Indirection.VerifyFixed): Likewise.
12096         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
12097         (ParameterReference.VerifyFixed): Value parameters are fixed.
12098         (This.VerifyFixed): Treat 'this' as a value parameter.
12099         * statement.cs (LocalInfo.IsFixed): Remove.
12100
12101 2005-07-01  Martin Baulig  <martin@ximian.com>
12102
12103         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
12104         `ec.EmitThis ()' to get the correct scope.
12105
12106 2005-07-01  Martin Baulig  <martin@ximian.com>
12107
12108         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
12109         instance is a ParameterReference; fixes #75299.
12110
12111 2005-07-01  Martin Baulig  <martin@ximian.com>
12112
12113         Reverted Marek's latest patch (r46725):
12114         - it contains structural changes which are neither mentioned in
12115           the ChangeLog nor explained anywhere; for example the additional
12116           argument of EmitContext's and Iterator's .ctor's and the
12117           TypeContainer.DefineMembers() change.
12118         - structural changes like this should go in in seperate patches
12119           and not be hidden in a huge patch which just seems to affect
12120           warnings and errors.
12121           a big and hard to understand patch.
12122         - it breaks iterators and causes regressions, for instance in
12123           test-iter-03.cs.      
12124
12125 2005-06-30  Raja R Harinath  <rharinath@novell.com>
12126
12127         Fix #75412.
12128         * expression.cs (Indexers.map): Remove.
12129         (Indexers.Append): Filter out inaccessible setters and getters.
12130         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
12131
12132         Fix #75283.
12133         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
12134         Refactored from ...
12135         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
12136         (FieldExpr.Emit, PropertyExpr.Emit): Update.
12137         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
12138         * expression.cs (Invocation.EmitCall): Add CS0120 check.
12139
12140 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
12141
12142         Fix #75322
12143         * class.cs (FieldBase.GetInitializerExpression): One more field
12144         for backup.
12145
12146 2005-06-28  Miguel de Icaza  <miguel@novell.com>
12147
12148         * pending.cs: Do not define a proxy if the base method is virtual,
12149         it will be picked up by the runtime (bug 75270).
12150
12151 2005-06-08  Martin Baulig  <martin@ximian.com>
12152
12153         The big Iterators rewrite :-)
12154
12155         * iterators.cs: Rewrite this to use the anonymous methods framework.
12156
12157         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
12158         before the TypeContainers; see 2test-21.cs.
12159
12160         * class.cs
12161         (TypeContainer.DefineType): Don't create a new EmitContext if we
12162         already have one (this only happens if we're an Iterator).
12163         (TypeContainer.Define): Also call Define() on all our iterators.
12164         (Method.CreateEmitContext): Added support for iterators.
12165
12166         * anonymous.cs
12167         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
12168         (AnonymousContainer.CreateMethodHost): Moved here from
12169         AnonymousMethod and made abstract.
12170         (AnonymousContainer.CreateScopeType): New abstract method.
12171         (AnonymousContainer.IsIterator): New public property.
12172         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
12173         get the ScopeTypeBuilder rather than manually defining it here. 
12174         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
12175         iterators here.
12176
12177         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
12178         before RootContext.DefineTypes().
12179
12180         * codegen.cs (EmitContext.RemapToProxy): Removed.
12181         (EmitContext.CurrentAnonymousMethod): Changed type from
12182         AnonymousMethod -> AnonymousContainer.
12183         (EmitContext.ResolveTopBlock): Protect from being called twice.
12184         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
12185         (EmitContext.EmitThis): Removed the iterators hacks; use the
12186         anonymous methods framework for that.
12187
12188         * statement.cs
12189         (ToplevelBlock.Container): Make this a property, not a field.
12190         (ToplevelBlock.ReParent): New public method; move the
12191         ToplevelBlock into a new container.
12192         (Foreach.TemporaryVariable): Simplify.
12193
12194 2005-06-05  Martin Baulig  <martin@ximian.com>
12195
12196         * statement.cs (LocalInfo.CompilerGenerated): New flag.
12197         (Block.AddTemporaryVariable): New public method; creates a new
12198         `LocalInfo' for a temporary variable.
12199         (Block.EmitMeta): Create the LocalBuilders for all the temporary
12200         variables here.
12201         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
12202         non-iterator variables.
12203
12204 2005-06-05  Martin Baulig  <martin@ximian.com>
12205
12206         * statement.cs (Foreach.TemporaryVariable): Create the
12207         LocalBuilder in the Emit phase and not in Resolve since in some
12208         situations, we don't have an ILGenerator during Resolve; see
12209         2test-19.cs for an example.
12210
12211 2005-06-04  Martin Baulig  <martin@ximian.com>
12212
12213         **** Merged r45395 from GCS ****
12214
12215         The big Foreach rewrite - Part II.
12216
12217         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
12218         with `PropertyInfo ienumerator_getcurrent'.
12219
12220         * codegen.cs (VariableStorage): Removed.
12221
12222         * statement.cs
12223         (Foreach): Derive from Statement, not ExceptionStatement.
12224         (Foreach.CollectionForeach): New nested class.  Moved all the code
12225         dealing with collection foreach here.
12226         (Foreach.ForeachHelperMethods): Removed.
12227         (Foreach.TemporaryVariable): Implement IMemoryLocation.
12228
12229 2005-05-23  Martin Baulig  <martin@ximian.com>
12230
12231         * statement.cs (Try.DoResolve): Don't create a `finally' if we
12232         don't need to.  Fix #75014.
12233
12234 2005-05-20  Martin Baulig  <martin@ximian.com>
12235
12236         Merged r44808 from GMCS.
12237
12238         * class.cs (TypeContainer.CircularDepException): Removed.
12239         (TypeContainer.DefineType): Removed the `InTransit' stuff.
12240         (TypeContainer.CheckRecursiveDefinition): Check for circular class
12241         (CS0146) and interface (CS0529) dependencies here.
12242
12243 2005-06-21  Raja R Harinath  <rharinath@novell.com>
12244
12245         * expression.cs (Invocation.EmitCall): Fix initialization
12246         'this_call' to reflect current behaviour.  Fix indentation.
12247
12248         * convert.cs (FindMostEncompassedType): Add two trivial special
12249         cases (number_of_types == 0 || number_of_types == 1).
12250         (FindMostEncompasingType): Likewise.
12251
12252 2005-06-17  Raja R Harinath  <rharinath@novell.com>
12253
12254         Some cleanups preparing for the fix of #75283.
12255         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
12256         error testing.
12257         (EventExpr.InstanceResolve): Likewise.
12258         (EventExpr.DoResolve): Remove redundant checks.
12259
12260 2005-06-10  Duncan Mak  <duncan@novell.com>
12261
12262         * cs-tokenizer.cs (process_directives): New flag for controlling
12263         the processing of preprocessor directives.
12264         (x_token): After seeing a '#', return Token.NONE instead of going
12265         to handle_preprocessing_directive() when not processing
12266         directives. This avoids unnecessary processing during the token peek in
12267         is_punct().
12268
12269         This fixes #74939.
12270
12271         * cs-tokenizer.cs (handle_preprocessing_directive, xtoken): Use
12272         the existing error reporting methods instead of Report.Error.
12273
12274         * convert.cs (priv_fmt_expr): Remove. It's not needed anymore
12275         after Raja's rewrite.
12276
12277 2005-06-08  Miguel de Icaza  <miguel@novell.com>
12278
12279         * class.cs: Small fix.
12280
12281 2005-06-08  Raja R Harinath  <rharinath@novell.com>
12282
12283         Fix #75160.
12284         * class.cs (GetPartialBases): Fix return value check of
12285         part.GetClassBases.
12286
12287 2005-06-07  Raja R Harinath  <rharinath@novell.com>
12288
12289         Ensure that partial classes are registered in their enclosing
12290         namespace.  Initial part of fix of #75160.
12291         * tree.cs (Tree.RecordDecl): Add new namespace argument.
12292         Register declspace with namespace here, not in
12293         DeclSpace.RecordDecl.
12294         * cs-parser.jay: Pass namespace to RecordDecl.
12295         * class.cs (PartialContainer.Create): Likewise.
12296         (ClassPart.DefineType): New sanity-check.  Throws an exception if
12297         called.
12298         * decl.cs (Declspace.RecordDecl): Remove.
12299         * namespace.cs (NamespaceEntry.DefineName): Remove.
12300
12301 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
12302
12303         * rootcontext.cs: Reset TargetExt as well.
12304
12305 2005-06-03  Raja R Harinath  <rharinath@novell.com>
12306
12307         * ecore.cs (Expression.Resolve): Emit CS0654 error when
12308         -langversion:ISO-1.
12309
12310 2005-06-02  Raja R Harinath  <rharinath@novell.com>
12311
12312         Fix #75080, cs0119.cs.
12313         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
12314         of ...
12315         (Expression.Resolve): ... this.  Use it.  Remove bogus code
12316         allowing ExprClass.Type and ExprClass.Namespace for
12317         ResolveFlags.VariableOrValue.
12318         (Expression.Resolve) [1-argument variant]: Change default resolve
12319         flags based on language version.
12320         (Expression.Error_UnexpectedKind): Use a simple string array
12321         rather than an ArrayList.
12322         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
12323         not ExprClass.Type.
12324         (TypeOfVoid.DoResolve): Likewise.
12325         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
12326         flags argument -- it always has the same value.
12327
12328 2005-05-31  Raja R Harinath  <rharinath@novell.com>
12329
12330         Fix #75081.
12331         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
12332         Use it in the error message.
12333         * assign.cs, expression.cs, statement.cs: Update.
12334
12335 2005-05-30  Raja R Harinath  <rharinath@novell.com>
12336
12337         Fix #75088.
12338         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
12339         the "almostMatchedMember" case too.
12340         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
12341         that failed the accessibility checks to 'almost_match'.
12342
12343 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
12344
12345         * attribute.cs: Use internal MethodBuilder methods to set
12346         ExactSpelling and SetLastError on PInvoke methods, instead
12347         of passing them via charset.  Fixes #75060.
12348
12349 2005-05-27  Raja R Harinath  <rharinath@novell.com>
12350
12351         * parameter.cs (Parameter): Remove TODO comment.
12352         (Parameter.DefineParameter): Remove Location parameter.
12353         (Parameters.LabelParameters): Likewise.
12354         * class.cs (Constructor.Emit): Update to change.
12355         (MethodData.Emit): Likewise.
12356         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
12357         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
12358
12359 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
12360
12361         * parameter.cs,
12362           Removed Parameters.Location and added Parameter.Location instead.
12363           Removed Location parameter from Emit() and GetSignature().
12364         * anonymous.cs,
12365           class.cs,
12366           cs-parser.jay,
12367           delegate.cs,
12368           iterators.cs,
12369           statement.cs :
12370           Modified all related calls.
12371
12372 2005-05-26  Raja R Harinath  <rharinath@novell.com>
12373
12374         Improve user-defined conversion handling.
12375         * convert.cs (GetConversionOperators): Rewrite.  Return only the
12376         applicable operators.
12377         (AddConversionOperators): New.  Helper for GetConversionOperators.
12378         (FindMostEncompassedType, FindMostEncompassingType): Verify that
12379         there is only one most encompassed/encompassing type.
12380         (FindMostSpecificSource, FindMostSpecificTarget): Remove
12381         "applicable operator" handling.
12382         (UserConversion): Move cache here from GetConversionOperators.
12383         Directly cache the chosen operator, rather than the whole
12384         MethodGroup.
12385         (ExplicitNumericConversion): Fix buggy implementation of Decimal
12386         case.  Allow conversion of decimal to sbyte and byte too.
12387         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
12388         New static methods.  Used to avoid allocating EmptyExpressions in
12389         convert.cs.
12390
12391 2005-05-24  Duncan Mak  <duncan@novell.com>
12392
12393         * ecore.cs (CastFromDecimal): New class for casting a decimal to
12394         another class, used in Convert.ExplicitNumericConversion.
12395         (CastToDecimal): New class, similar to above, but casts to
12396         System.Decimal, used in Convert.ImplicitNumericConversion and also
12397         in explicit convesion from double/float to decimal.
12398
12399         * convert.cs (ImplicitNumericConversion): Handle implicit
12400         conversions to System.Decimal.
12401         (ExplicitNumericConversion): handle explicit conversions to
12402         System.Decimal.
12403
12404         This fixes #68711.
12405         
12406 2005-05-20  Miguel de Icaza  <miguel@novell.com>
12407
12408         * typemanager.cs (EnumToUnderlying): Do not throw if we do not
12409         know the type at this stage, just break through.   Fixes #75008 
12410
12411 2005-05-19  Martin Baulig  <martin@ximian.com>
12412
12413         * delegate.cs
12414         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
12415         to disable error reporting.
12416
12417         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
12418         here since we don't want to report an error; see the new test-336.cs.
12419
12420 2005-05-19  Raja R Harinath  <rharinath@novell.com>
12421
12422         * statement.cs (ToplevelBlock.GetParameterReference)
12423         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
12424         Move here from class Block.
12425         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
12426         * expression.cs (ParameterReference.DoResolveBase): Likewise.
12427
12428 2005-05-18  Martin Baulig  <martin@ximian.com>
12429
12430         Fix #74978.
12431
12432         * flowanalysis.cs
12433         (FlowBranching.Reachability): Add non-static public And() and Or()
12434         methods.
12435         (FlowBranchingSwitch): New class; do the `break_origins' thing
12436         like in FlowBranchingLoop.
12437         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
12438         reachability, not just locals and parameters.
12439         (FlowBranching.MergeChild): Remove some of the hacks for loop and
12440         switch; MergeBreakOrigins() now takes care of that.
12441
12442 2005-05-18  Martin Baulig  <martin@ximian.com>
12443
12444         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
12445         a loop and may leave it, reset the barrier; fixes #74974.
12446
12447 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
12448         
12449         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
12450         is back.
12451         
12452         * cs-parser.jay: Catch more lexical errors.
12453         
12454         * report.cs: Add one more Error method.
12455         
12456         * rootcontext.cs,
12457         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
12458
12459 2005-05-17  Martin Baulig  <martin@ximian.com>
12460
12461         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
12462         #70970. 
12463
12464 2005-05-16  Raja R Harinath  <rharinath@novell.com>
12465
12466         Fix test-382.cs.  Emit values of decimal constants.
12467         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
12468         Carved out of ...
12469         (TypeContainer.AddField): ... this.
12470         (TypeContainer.EmitFieldInitializers): Allow the list of fields
12471         with initializers to include 'Const's.
12472         (ClassPart.RegisterFieldForInitialization): Forward to
12473         PartialContainer.
12474         * const.cs (Const.Const): Pass initializer to base class.
12475         (Const.Define): In case of decimal constants, register them for
12476         initialization in a static constructor.
12477
12478 2005-05-14  Martin Baulig  <martin@ximian.com>
12479
12480         * statement.cs (Block.Resolve): Correctly handle unreachable code;
12481         do not call ResolveUnreachable() on unreachable statements in
12482         here, see the comment in the source code.
12483
12484 2005-05-13  Raja R Harinath  <rharinath@novell.com>
12485
12486         Fix #74934.
12487         * expression.cs (BinaryResolveOperator): If one of the operands of
12488         an equality comparison is 'null' and the other is a pointer type,
12489         convert the null to a NullPointer.
12490         * convert.cs (ImplicitReferenceConversion): If the expression is a
12491         NullLiteral and the target type is a pointer type, return a
12492         NullPointer instead.
12493         (ImplicitConversionStandard): Likewise.
12494
12495 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
12496         
12497         * cs-parser.jay: Set readonly context based on special constructs.
12498         
12499         * expression.cs (LocalVariableReference.DoResolveBase): Improved
12500         readonly variable error handling.
12501         
12502         * rootcontext.cs (EmitCode): Don't verify members when error
12503         occurred.
12504         
12505         * statement.cs (LocalInfo): Add reaodnly context information.
12506         (SetReadOnlyContext, GetReadOnlyContext): New methods.
12507
12508 2005-05-13  Raja R Harinath  <rharinath@novell.com>
12509
12510         * statement.cs (Block.Resolve): Revert change below.  Modify fix
12511         for #74041 to initialize 'resolved' to false only for explicit
12512         blocks.  Fixes #74873.
12513
12514 2005-05-12  Raja R Harinath  <harinath@gmail.com>
12515
12516         Fix #74920.
12517         * typemanager.cs (unmanaged_enclosing_types): New.
12518         (IsUnmanagedType): Avoid infloops by using
12519         'unmanaged_enclosing_types' to talk with recursive invocations.
12520
12521 2005-05-13  Martin Baulig  <martin@ximian.com>
12522
12523         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
12524         instance variable, not a local.  Fix #74873.
12525         (Block.ResolveUnreachable): Set it to true here.
12526
12527 2005-05-11  Duncan Mak  <duncan@novell.com>
12528
12529         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
12530         continuing to process for 'arg'.
12531         (handle_preprocessing_directive): Check the argument of the #endif
12532         directive and report error CS1025 if there are any trailing
12533         characters.
12534
12535         According to the C# spec, having even whitespace after the #endif
12536         directive is illegal; however, because we call arg.TrimEnd ()
12537         beforehand, we have the same behavior as csc, allowing whitespace
12538         after the directive.
12539
12540         Fixes #74892.
12541
12542 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
12543
12544         Fix #74863.
12545         
12546         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
12547         (Constructor.GetObsoleteAttribute): Implemented correctly.
12548
12549 2005-05-10  Martin Baulig  <martin@ximian.com>
12550
12551         * support.cs (ReflectionParameters.ParameterModifier): Use
12552         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
12553         and `ParameterAttributes.In'.  Fixes #74884.
12554
12555 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
12556
12557         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
12558         
12559         * expression.cs (Argument.GetParameterModifier): Turned to property.
12560         (Invocation.Error_InvalidArguments): Add more descriptive errors.
12561         
12562         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
12563         its C# equivalent.
12564         
12565 2005-05-09  Raja R Harinath  <rharinath@novell.com>
12566
12567         Fix #74852.
12568         * decl.cs (MemberCache.AddMethods): Register override methods,
12569         rather than non-override methods.
12570         * typemanager.cs (RegisterOverride): New.
12571         (IsOverride): Update.
12572
12573 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
12574
12575         Fix #73105.
12576         
12577         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
12578         recursive declaration.
12579         
12580         * statement.cs (Block.ResolveMeta): Report any error in resolving.
12581         
12582 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
12583
12584         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
12585         
12586         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
12587
12588 2005-05-05  Raja R Harinath  <rharinath@novell.com>
12589
12590         Fix #74797.
12591         * decl.cs (DeclSpace.FamilyAccessible): 
12592         Use TypeManager.IsNestedFamilyAccessible.
12593
12594         Fix reopened #64812.
12595         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
12596         internal'.
12597
12598 2005-05-04  Raja R Harinath  <rharinath@novell.com>
12599             Abin Thomas  <projectmonokochi@rediffmail.com>
12600             Anoob V E  <projectmonokochi@rediffmail.com>
12601             Harilal P R  <projectmonokochi@rediffmail.com>
12602
12603         Fix #64812.
12604         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
12605         allow access to all static members.
12606
12607 2005-05-04  Martin Baulig  <martin@ximian.com>
12608
12609         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
12610
12611 2005-05-04  Martin Baulig  <martin@ximian.com>
12612
12613         Fix #74655.
12614
12615         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
12616         section at the end; make things work if `default' is not the last
12617         section.        
12618
12619 2005-05-04  Martin Baulig  <martin@ximian.com>
12620
12621         Fix #70400.
12622
12623         * statement.cs (Switch): Replaced the `got_default' field with a
12624         `default_section' one.
12625         (Switch.CheckSwitch): Set `default_section' here.
12626         (Switch.Resolve): If we're a constant switch and the constant is
12627         not found, use the default section.
12628
12629 2005-05-03  Martin Baulig  <martin@ximian.com>
12630
12631         * expression.cs (ArrayAccess.EmitGetLength): New public method.
12632
12633         * statement.cs (Foreach.ArrayForeach): New nested class.
12634         (Foreach.TemporaryVariable): New nested class.
12635         (Foreach.EmitArrayForeach): Removed; this is now in the new
12636         ArrayForeach class.
12637
12638 2005-05-03  Raja R Harinath  <rharinath@novell.com>
12639
12640         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
12641         more conservative.
12642         (VerifyPendingMethods): Revert change below.
12643
12644         * typemanager.cs (IsOverride, RegisterNonOverride): New.
12645         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
12646         that used to trigger warning -28.  Remove warning -28.
12647         * expression.cs (Invocation.OverloadResolve): Use
12648         TypeManager.IsOverride to distinguish override methods.
12649
12650         Fix #74773.
12651         * pending.cs (VerifyPendingMethods): If a base type implements the
12652         requested interface, don't bother checking individual methods of
12653         the base type.  As a side-effect, this prevents the creation of
12654         unnecessary proxies.
12655
12656 2005-05-02  Martin Baulig  <martin@ximian.com>
12657
12658         Fix #70182.
12659
12660         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
12661         Also `And' the locals if the old vector is null.
12662         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
12663         null; in this case we basically reset all the variables.        
12664
12665 2005-05-02  Martin Baulig  <martin@ximian.com>
12666
12667         Fix #74529.
12668
12669         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
12670         Added `FlowBranching branching' argument; always `and' the
12671         variables instead of `or'ing them unless we're an infinite loop.
12672
12673         * statement.cs (While.Resolve): Create a new sibling unless we're
12674         infinite.       
12675
12676 2005-05-02  Martin Baulig  <martin@ximian.com>
12677
12678         Fix #70140.
12679
12680         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
12681         arguments; use it instead of creating a new TopLevelBlock.
12682         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
12683         our ConstructorInitializer.
12684
12685         * statement.cs
12686         (TopLevelBlock.TopLevelBranching): New public property.
12687         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
12688         and create our `TopLevelBranching'.
12689
12690         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
12691         anonymous method host, use `block.TopLevelBranching' rather than
12692         creating a new branching.
12693
12694 2005-04-20  Miguel de Icaza  <miguel@novell.com>
12695
12696         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
12697         a ScopeInfo, if any of the current children is a child of the new
12698         entry, move those children there.
12699
12700 2005-04-30  Martin Baulig  <martin@ximian.com>
12701
12702         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
12703         at the beginning of a SwitchSection.  Fix #73335.
12704
12705 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
12706
12707         Fix #74378
12708         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
12709         
12710         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
12711         (FieldExpr.DoResolve): Obsolete members are ignored for field
12712         initializers.
12713         
12714 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
12715
12716         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
12717         of arrays detection.
12718
12719         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
12720         verification.
12721         (Field.VerifyClsCompliance): Volatile fields are not compliant.
12722
12723         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
12724         arrays report.
12725
12726 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
12727
12728         * cs-parser.jay: Use the prefered version of -unsafe in error
12729         message.
12730
12731 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
12732
12733         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
12734         circumstances.
12735
12736 2005-04-20  John Luke  <john.luke@gmail.com>
12737
12738         * driver.cs: fix typo in error message, --outout to --output
12739
12740 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
12741
12742         * codegen.cs (InRefOutArgumentResolving): New field.
12743         
12744         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
12745         fields outside contructor.
12746         
12747         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
12748         
12749 2005-04-19  Miguel de Icaza  <miguel@novell.com>
12750
12751         * anonymous.cs (CaptureContext.EmitParameterInstance): The
12752         parameter code was not completed ever, so it was not as up-to-date
12753         as local variables.  Must finish it.
12754
12755         The bug fix was to compare the Toplevel of the block, not the
12756         current block.  Thanks for Ben for pointing this out. 
12757
12758 2005-04-19  Raja R Harinath  <rharinath@novell.com>
12759
12760         * decl.cs (AddMethods): Use the declaring type of the problem
12761         method to determine if we want to squash a warning.
12762
12763 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
12764
12765         * attribute.cs: Removed debug output.
12766
12767         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
12768         
12769         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
12770         Report.Stderr.
12771         
12772 2005-04-18  Raja R Harinath  <rharinath@novell.com>
12773
12774         Fix #74481.
12775         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
12776         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
12777         all null comparisons against reference types.
12778
12779 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
12780
12781         Fix# 74565
12782         * class.cs (TypeContainer.CircularDepException) New nested
12783         exception class.
12784         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
12785         (TypeContainer.DefineType): Removed error, reset InTransit before
12786         exit.
12787         (Class.DefineType): Throw exception when is in Transit.
12788         Catch exception and report error.
12789         (Struct.DefineType): Throw exception when is in Transit.
12790         Catch exception and report error.
12791         (Interface.DefineType): Throw exception when is in Transit.
12792         Catch exception and report error.
12793
12794         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
12795         handle nested exception handlers.
12796
12797         * flowanalysis.cs (InTryWithCatch): New method, search for try with
12798         a catch.
12799
12800         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
12801         InFinally and InCatch storage.
12802
12803         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
12804         (Catch.Resolve): Set and Restore ec.InCatch.
12805         (Try.Resolve): Set and Restore ec.InFinally.
12806         (Try.HasCatch): True when try has catch.
12807
12808 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
12809
12810         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
12811           for the same event member, so exclude such cases from warning 419.
12812           Fixed bug #74633.
12813
12814 2005-04-16  Miguel de Icaza  <miguel@novell.com>
12815
12816         * expression.cs (Binary.ResolveOperator): Apply patch from John
12817         Luke to fix bug 59864: operators &, | and ^ on enumerations
12818         require that the same enum type on both sides.
12819
12820         * driver.cs: Add warnings to old flag usage, this is to assist
12821         people who produce Makefiles and hope that the Makefiles will be
12822         used on Windows.
12823
12824         * class.cs (TypeContainer.EmitType): Moved the definition of the
12825         special $PRIVATE$ field from the resolve phase to the Emit phase.
12826         During resolve we do not know if we are a struct with
12827         HasExplicitLayout, we know this only after the attributes for the
12828         type are emitted.
12829
12830         Set the FieldOffset to zero on the dummy field that we create for
12831         the class.   Fixes 74590.
12832
12833 2005-04-16  Raja R Harinath  <rharinath@novell.com>
12834
12835         Fix #73834.
12836         * ecore.cs (PropertyExpr.resolved): New.
12837         (DoResolve): Use it to handle a case of double resolution here.
12838         Handle a case of identical-name-and-type-name.
12839         * expression.cs (ArrayCreation.CheckIndices): Avoid double
12840         resolution by storing the results of expression resolution back
12841         into the "probes" array.
12842
12843 2005-04-15  Raja R Harinath  <rharinath@novell.com>
12844
12845         Fix cs0208-7.cs and cs0208-8.cs.
12846         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
12847         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
12848         error reporting to point out the reason a struct is not unmanaged.
12849
12850 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
12851
12852         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
12853           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
12854
12855 2005-04-13  Raja R Harinath  <rharinath@novell.com>
12856
12857         Fix #74528.
12858         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
12859         IdenticalNameAndTypeName here.
12860         (EventExpr.InstanceResolve): Likewise.
12861
12862 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
12863
12864         C# 2.0 DefaultCharSetAttribute implementation
12865         
12866         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
12867         which allows us to set GlobalNamespace for every resolve.
12868         (Attribute.ResolveArguments): Cut from Resolve.
12869         (Attribute.GetCharSetValue): Returns CharSet named argument.
12870         (Attribute.DefinePInvokeMethod): Gets default charset from
12871         module settings.
12872         (GlobalAttribute.ResolveAsTypeStep): Override.
12873         (GlobalAttribute.ResolveArguments): Override.
12874         
12875         * class.cs (TypeAttr): Is protected.
12876         
12877         * codegen.cs (ModuleClass.DefaultCharSet): New member.
12878         (ModuleClass.DefaultCharSetType): New memeber.
12879         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
12880         
12881         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
12882         charset from module.
12883         
12884         * delegate.cs (TypeAttr): Override.
12885         (Delegate.DefineType): Use this TypeAttr.
12886         
12887         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
12888         at very early stage (before types are defined) to resolve model
12889         module attributes. It will probably not work with corlib but it
12890         should be ok.
12891         
12892         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
12893         charset from module.
12894         
12895         * typemanager.cs (default_charset_type): New type.
12896
12897 2005-04-13  Raja R Harinath  <rharinath@novell.com>
12898
12899         * decl.cs (MemberCache.AddMethods): Don't warn if
12900         System.Object.Finalize has buggy MethodAttributes.
12901
12902         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
12903         removed below.
12904
12905 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
12906
12907         * doc.cs : detect ambiguous reference to overloaded members.
12908           Fixed bug #71603. MS 1.1 csc does not detect it.
12909
12910 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
12911
12912         * doc.cs : delegates must not be referenced with parameters.
12913           Fixed bug #71605.
12914
12915 2005-04-12  Miguel de Icaza  <miguel@novell.com>
12916
12917         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
12918
12919 2005-04-10  Miguel de Icaza  <miguel@novell.com>
12920
12921         * driver.cs (MainDriver): Stop processing if the CLS stage found
12922         errors. 
12923
12924         (CompilerCallableEntryPoint.InvokeCompiler): Always
12925         reset after execution;   Take a TextWriter argument for the
12926         output.
12927
12928         * report.cs: Use the error stream instead of hardcoding stderr. 
12929
12930 2005-04-09  Miguel de Icaza  <miguel@novell.com>
12931
12932         * class.cs: Reduce code paths to test, too small of an
12933         optimization to make it worth the extra testing.  Always perform
12934         it. 
12935
12936 2005-04-08  Raja R Harinath  <rharinath@novell.com>
12937
12938         Fix #74510.
12939         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
12940         operators that had errors reported on them.
12941
12942 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
12943
12944         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
12945         argument types.
12946         (Attribute.Resolve): Add named argument type checking.
12947         
12948         * class.cs (FixedField.Define): Use IsPrimitiveType
12949         
12950         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
12951         
12952         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
12953         unsafe parameter types.
12954         
12955         * statement.cs (Using.ResolveExpression): Add better error description.
12956         
12957         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
12958         
12959 2005-04-08  Raja R Harinath  <rharinath@novell.com>
12960
12961         Fix #74484.
12962         * attribute.cs (Attribute.GetAttributeUsage): Resolve
12963         AttributeUsageAttribute in the emitcontext of the attribute class,
12964         not in the emitcontext of the attributable entity it was attached to.
12965         * cs-parser.jay: Use 'current_class', not 'current_container',
12966         when creating a GlobalAttribute.
12967
12968 2005-04-08  Alp Toker  <alp@atoker.com>
12969
12970         * pending.cs: The fix to #58413 failed to compile methods implementing
12971         interfaces with/without params modifiers and vice versa, even though
12972         params modifiers aren't part of the signature. Make the modifier check
12973         less strict as in csc.
12974
12975 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
12976             Anoob V E  <projectmonokochi@rediffmail.com>
12977             Harilal P R  <projectmonokochi@rediffmail.com>
12978
12979         Fix #58413.
12980         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
12981         modifiers of pending methods.
12982         (PendingImplementation.PendingImplementation): Initialize it.
12983         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
12984         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
12985         with ParameterData.  Add check for modifiers.
12986         * class.cs (MethodData.Define): Update to changes.
12987
12988 2005-04-07  Raja R Harinath  <rharinath@novell.com>
12989
12990         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
12991
12992 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
12993
12994         * class.cs (PropertyMethod.Define): Check private accessor in abstract
12995         property.
12996         
12997         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
12998         
12999         * rootcontext.cs,
13000         * typemanager.cs: Registered RequiredAttributeAttribute.
13001         
13002 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
13003
13004         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
13005         Warning CS0169 is back at level 3.
13006         (IMethodData.SetMemberIsUsed): New method.
13007         
13008         * decl.cs (IsUsed): New value; moved from FieldBase.Status
13009         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
13010         
13011         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
13012
13013         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
13014         contants.
13015         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
13016         is used.
13017         
13018         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
13019         is used.
13020         
13021         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
13022         to avoid the problems with nested types.
13023
13024 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
13025             Anoob V.E  <projectmonokochi@rediffmail.com>
13026             Harilal P.R  <projectmonokochi@rediffmail.com>
13027             Raja R Harinath  <rharinath@novell.com>
13028
13029         Fix #73820.
13030         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
13031         attribute.
13032         * typemanager (GetConstructor): Make public.
13033
13034 2005-04-05  John Luke  <john.luke@gmail.com>
13035             Raja R Harinath  <rharinath@novell.com>
13036
13037         Fix #62232.
13038         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
13039         struct too.  Return false quicker in a few cases.
13040         (VerifyUnManaged): Use it.
13041
13042 2005-04-05  Raja R Harinath  <rharinath@novell.com>
13043
13044         Fix #74041.
13045         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
13046         not 'unreachable_seen'.
13047
13048 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
13049
13050         * attribute.cs (Attribute.GetValue): Removed unused.
13051         
13052         * codegen.cs (CodeGen.TrimExt): Removed unused.
13053         
13054         * cs-parser.jay (output): Removed unused.
13055         
13056         * cs-tokenizer.cs (hex_digits): Removed unused.
13057         
13058         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
13059         
13060         * expression.cs (Indirection.LoadExprValue): Removed unused.
13061         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
13062         
13063         * iterators.cs (Iterator.param_types): Removed unused.
13064         
13065         * statement.cs (Goto.block): Removed unused.
13066         (ToplevelBlock.did): Removed unused.
13067         (Switch.ResolveConstantSwitch): Removed unused.
13068
13069 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
13070
13071         * rootcontext.cs: Allow mcs to bootstrap with the compilation
13072         resetting thingy.
13073
13074 2005-04-01  Raja R Harinath  <rharinath@novell.com>
13075
13076         Fix #74232 and cs0208-3.cs.
13077         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
13078         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
13079         unmanaged type.  Don't use FieldBuilders when 't' is a
13080         TypeBuilder.  Use ModFlags and MemberType fields.
13081         * class.cs (MemberBase.member_type): Rename from MemberType.
13082         (MemberBase.MemberType): New property.  Determines member_type on
13083         demand.
13084         (MemberBase.DoDefine): Don't initialize MemberType here.
13085         (FieldMember.Define): Likewise.
13086
13087 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
13088
13089         Fix #74241
13090         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
13091         Attributes are emitted there.
13092         
13093 2005-04-01  Raja R Harinath  <rharinath@novell.com>
13094
13095         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
13096         keyword in 'partial enum' too.
13097         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
13098         is not allowed).
13099         Report from Kamil Skalski <nazgul@omega.pl>.
13100
13101         Fix #74309.
13102         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
13103         have partial containers too.
13104
13105         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
13106         in block' checks to Block.CheckInvariantMeaningInBlock.
13107         * statement.cs (Block.GetKnownVariableInfo): Make private.
13108         (Block.IsVariableUsedInChildBlock): Remove.
13109         (Block.IsVariableUsedInBlock): Likewise.
13110         (Block.CheckInvariantMeaningInBlock): New.  Show location of
13111         conflicting declaration.
13112         (Block.AddVariable): Make error messages less long-winded and more
13113         specific.  Show location of conflicting declaration.
13114         * parameter.cs (Parameters.Location): New readonly property.
13115
13116 2005-03-31  Raja R Harinath  <rharinath@novell.com>
13117
13118         Clean up semantics of invoking ResolveMemberAccess.
13119         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
13120         can have an instance, ensure that we pass in a non-TypeExpression
13121         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
13122         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
13123         argument.  Update to changes and simplify.
13124         (FieldExpr.Emitinstance): Remove CS0120 check.
13125         (PropertyExpr.EmitInstance): Likewise.
13126         * expression.cs (Argument.Resolve): Likewise.
13127         (Invocation.DoResolve): Update to changes in semantics of
13128         InstanceExpression.
13129
13130 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
13131
13132         Fix #74241
13133         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
13134         customization.
13135         
13136         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
13137
13138 2005-03-31  Raja R Harinath  <rharinath@novell.com>
13139
13140         Fix difference in behaviour with commandline invocation.
13141         * driver.cs (Driver.Reset): New.
13142         (CompilerCallableEntryPoint): Call it.
13143
13144         * statement.cs (If.Resolve): Avoid spurious "uninitialized
13145         variable" warnings if the boolean expression failed to resolve.
13146
13147 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
13148
13149         * attribute.cs: Fix the union of several permissions when some of them
13150         are unrestricted (so the result isn't an unrestricted permission set).
13151         Fix #74036.
13152
13153 2005-03-30  Raja R Harinath  <rharinath@novell.com>
13154
13155         * ecore.cs (MemberExpr): New class.  Convert from interface
13156         IMemberExpr.
13157         (MemberExpr.ResolveMemberAccess): Refactor and move here from
13158         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
13159         error checks.
13160         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
13161         (MethodGroupExpr.IsExplicitImpl): Remove.
13162         (Expression.GetFieldFromEvent): Remove.
13163         (SimpleName.MemberStaticCheck): Remove.
13164         (SimpleName.DoSimpleNameResolve): Update to changes.
13165         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
13166         (MemberAccess.IdenticalNameAndTypeName): Remove.
13167         (MemberAccess.error176): Move to MemberExpr.
13168         (MemberAccess.DoResolve): Update to changes.
13169         (BaseAccess.DoResolve): Likewise.
13170
13171 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
13172
13173         C# 2.0 Conditional attribute class implementation
13174         
13175         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
13176         Analyzes class whether it has attribute which has ConditionalAttribute
13177         and its condition is not defined.
13178         
13179         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
13180         (Class.IsExcluded): New method. Search for at least one defined
13181         condition in ConditionalAttribute of attribute class.
13182
13183 2005-03-30  Raja R Harinath  <rharinath@novell.com>
13184
13185         * ecore.cs (PropertyExpr): Derive from Expression, not
13186         ExpressionStatement.
13187         (PropertyExpr.EmitStatement): Remove.
13188
13189 2005-03-29  Raja R Harinath  <rharinath@novell.com>
13190
13191         Fix #74060.
13192         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
13193         internal field "value__" of an enum be private.  The examples for
13194         "value__" that I found on MSDN all used FieldAttributes.Private.
13195
13196         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
13197         Don't mention IL method attribute names.
13198
13199         Fix #47991.  Remove a TODO.
13200         * statement.cs (Block.Toplevel): Make into a field.
13201         (Block.Parameters): Move into ToplevelBlock.
13202         (Block.known_variables): Rename from child_variable_names.
13203         (Block.Block): Remove variants that take Parameters.  Initialize
13204         'Toplevel' with the immediately surrounding toplevel block.
13205         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
13206         LocalInfo parameter.
13207         (Block.GetKnownVariableInfo): New.
13208         (Block.IsVariableNameUsedInChildBlock): Update.
13209         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
13210         the block, even though it may not be in scope.
13211         (Block.AddVariable): Remove Parameters parameter.  Use
13212         Toplevel.Parameters instead.
13213         (Block.AddConstant): Remove Parameters parameter.
13214         (Block.GetParameterReference): Update to use Toplevel.Parameters.
13215         (Block.IsParamaterReference): Likewise.
13216         (Block.IsLocalParameter): Likewise.  Simplify a lot.
13217         (ToplevelBlock.Parameters): New.  Moved from Block.
13218         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
13219         initialize Parameters to a non-null value.
13220         * cs-parser.jay: Update to changes.
13221         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
13222         simple names that mean different things in the same block.  Use
13223         Block.IsVariableNameUsedInBlock.
13224
13225 2005-03-28  Raja R Harinath  <rharinath@novell.com>
13226
13227         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
13228         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
13229         GetTypeHandle.  It is possible for a reflected type to derive from
13230         a TypeBuilder (e.g., int[] derives from the TypeBuilder
13231         System.Array during mscorlib compilation).
13232         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
13233         contain a method_hash, don't create one either.  Don't create a
13234         deep copy of the base cache's method_hash.
13235         (MemberCache.SetupCache): Rename back from DeepCopy.
13236         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
13237         already initialized.  If we see an override function, add its
13238         underlying base virtual function to the member_hash too.
13239
13240         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
13241
13242 2005-03-26  Raja R Harinath  <harinath@acm.org>
13243
13244         Fix #73038.
13245         * assign.cs (Assign.DoResolve): When the RHS of an assignment
13246         fails to resolve, ensure that the LHS is still resolved as an
13247         lvalue.
13248
13249 2005-03-25  Raja R Harinath  <harinath@acm.org>
13250
13251         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
13252         ec.ContainerType.
13253         (Enum.current_ec): Remove.
13254         (Enum.LookupEnumValue): Remove EmitContext argument.
13255         Just uses the one created during DefineType.
13256         (Enum.FindMembers): Update.
13257         * expression.cs (MemberAccess.DoResolve): Update.
13258
13259 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
13260
13261         * assign.cs (Assign.DoResolve): Check for CS1717 when
13262         source and target are same (uses Equals).
13263
13264         * expression.cs (LocalVariableReference, ParameterReference,
13265         This): Implemented Equals, GetHashCode.
13266
13267         * statement.cs (Block.GetParameterReference): Removed useless
13268         local variable.
13269
13270 2005-03-22  Raja R Harinath  <rharinath@novell.com>
13271
13272         Fix cs0128.cs
13273         * statement.cs (Block.AddVariable): Ensure that we skip implicit
13274         blocks before deciding whether the error is cs0136 or cs0128.
13275
13276         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
13277         (using_alias_directive, using_namespace_directive): Pass
13278         MemberName, not an expression to Namespace.UsingAlias and
13279         Namespace.Using.
13280         (MakeName): Use the MemberName of the namespace.
13281         * namespace.cs (Namespace.MemberName): New.
13282         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
13283         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
13284         Likewise.
13285         * decl.cs (MemberName.Name): Make readonly.
13286         (MemberName.FromDotted): New "constructor".
13287         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
13288         (MemberCore.Name): Compute from MemberName on demand.
13289         (MemberCore.SetMemberName): Provide a way to change the
13290         MemberName.
13291         (MemberCore.AddToContainer): Don't take a fullname parameter.
13292         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
13293         fully qualified name of the container to the member name.
13294         (TypeContainer.AddToTypeContainer): Use a fully qualified name
13295         only if the type is a member of the root container.
13296         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
13297         MemberName.Left rather than searching for an embedded ".".
13298         (PartialContainer.CreatePart): Update to changes in RootContext.
13299         (MemberBase.ShortName): Turn into a property.  Use
13300         MemberCore.SetMemberName.
13301         (MemberBase.ExplicitInterfaceName): Remove.
13302         (MemberBase.UpdateMemberName): Remove.
13303         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
13304         (PropertyBase.SetMemberName): New override.
13305         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
13306         (Tree.GetDecl): New.
13307         (Tree.AllDecls): Rename from Decls.
13308         * attribute.cs, enum.cs, report.cs: Update to changes.
13309         * driver.cs (MainDriver): Use MemberName.FromDotted on
13310         RootContext.MainClass.
13311
13312 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
13313
13314         * class.cs (FixedField.Define): Check for CS1664 and more sanity
13315         checks.
13316
13317         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
13318
13319 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
13320
13321         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
13322         property accessor modifiers.
13323
13324         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
13325         fixed buffer attribute (CS1716).
13326         (PropertyMethod.HasCustomAccessModifier): When property accessor
13327         has custom modifier.
13328
13329         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
13330         modifiers.
13331         (PropertyExpr.DoResolveLValue): Add CS0272.
13332
13333 2005-03-17  Miguel de Icaza  <miguel@novell.com>
13334
13335         * convert.cs: When converting to a pointer, use the proper Conv.U
13336         or Conv.I depending on the source data type.
13337
13338         * cs-tokenizer.cs: Make the size for large decimal constants,
13339         fixes #72957.
13340
13341 2005-03-17  Martin Baulig  <martin@ximian.com>
13342
13343         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
13344         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
13345
13346 2005-03-17  Martin Baulig  <martin@ximian.com>
13347
13348         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
13349         to bool so we can return an error condition.
13350         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
13351         returned an error.
13352
13353 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
13354
13355         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
13356         attributes.
13357
13358 2005-03-16  Raja R Harinath  <rharinath@novell.com>
13359
13360         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
13361         Refactor to avoid traversing the list of assemblies, and to avoid
13362         string concatenation.
13363         * typemanager.cs (guid_attr_type): Remove.
13364         (negative_hits, pointers, references): Remove hashes.
13365         (type_hash): New.
13366         (GetConstructedType): New.  Uses type_hash to handle constructed
13367         types (arrays, references, pointers).
13368         (GetReferenceType, GetPointerType): Use it.
13369         (GetNestedType): New.  Uses type_hash to handle nested types of
13370         reflected types.
13371         (LookupType, LookupTypeDirect): Remove.
13372         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
13373         'types' hash and LookupTypeReflection directly.
13374         (params_string, params_object): Use GetConstructedType.
13375         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
13376         top-level types.
13377         (Namespace.Lookup): Use cached_types.
13378         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
13379         provided by old TypeManager.LookupType.
13380         * rootcontext.cs (MakeFQN): Remove.
13381         * decl.cs (DeclSpace.MakeFQN): Likewise.
13382         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
13383         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
13384         TypeManager.GetConstructedType.
13385         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
13386
13387 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
13388
13389         * class.cs (MethodCore.CheckBase): Report CS1715 for properties and
13390         indexers.
13391
13392         * cs-parser.jay: Reports CS1527 for any namespace element.
13393
13394         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
13395         Added CS0407.
13396
13397         * expression.cs (ParameterReference.IsAssigned): Changed error to
13398         CS0269.
13399         (Error_WrongNumArguments): Moved CS0245 detection here.
13400
13401         * statement.cs (Return.Resolve): Add CS1622 report.
13402
13403 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
13404
13405         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
13406
13407 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
13408
13409         * attribute.cs expression.cs: Get rid of some allocations.
13410
13411 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
13412
13413         * doc.cs : just eliminate the latest change.
13414
13415 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
13416
13417         * doc.cs : commented out the latest change. It breaks xml-030.cs
13418
13419 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
13420
13421         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
13422           fail. So invoke CreateType() in FindDocumentedType().
13423
13424 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
13425
13426         * cs-tokenizer.cs : added IsKeyword().
13427         * doc.cs : Detect keyword incorrectly used as identifier.
13428           Allow identifiers prefixed by @.
13429
13430 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
13431
13432         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
13433         It caused exception in namespace resolving (again!).
13434         
13435         * class.cs (Class.ctor): Removed exit.
13436         (PropertyMethod.ctor): ditto.
13437         
13438         * codegen.cs (Codegen.Reset): Reset static data.
13439         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
13440         
13441         * cs-tokenizer.cs (Cleanup): Removed.
13442         
13443         * driver.cs (GetSystemDir): Rewrote to one line command.
13444         It caused problem with unloaded dynamic modules.
13445         (UnixParseOption): Removed Exit.
13446         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
13447         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
13448         Now can be mcs used as library.
13449         
13450         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
13451         empty location.
13452         
13453         * location.cs (Reset): Reset static data.
13454         
13455         * namespace.cs (Reset): Reset static data.
13456         
13457         * report.cs (Report.Reset): Reset static data.
13458         
13459         * rootcontext.cs (RootContext.Reset): Reset static data.
13460         
13461         * tree.cs (RootTypes.ctor): Use Location.Null
13462         
13463         * typemanager.cs (TypeManager.Reset): Reset static data.
13464         (CoreLookupType): Removed Exit.
13465         (TypeHandle.Reset): Reset static data.
13466         
13467 2005-03-10  Raja R Harinath  <rharinath@novell.com>
13468
13469         Fix #73516.
13470         * typemanager.cs (ComputeNamespaces): Import namespaces from
13471         referenced modules too.
13472
13473 2005-03-09  Raja R Harinath  <rharinath@novell.com>
13474
13475         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
13476         than '.'.
13477
13478 2005-03-09  Raja R Harinath  <rharinath@novell.com>
13479
13480         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
13481         enclosing DeclSpace.  This ensures that a name-lookup populates
13482         more caches and there are fewer 'TypeExpression's.  Carve out
13483         nested type lookup into ...
13484         (LookupNestedTypeInHierarchy): ... this.
13485
13486 2005-03-09  Raja R Harinath  <rharinath@novell.com>
13487
13488         Clean up a few partial-class semantics.  
13489         Fixes test-357.cs and cs1618-2.cs.
13490         * cs-parser.jay (struct_declaration): Use 'current_class' as
13491         parent of newly-created struct.  Remove call to Register ().
13492         Use 'pop_current_class' to complete handing the current struct.
13493         (interface_declaration): Likewise.
13494         (class_declaration): Likewise.
13495         (enum_declaration): Use 'current_class' as parent of newly created
13496         enum.
13497         (delegate_declaration): Likewise.
13498         (pop_current_class): New function.  This is used to handle closing
13499         up the 'current_class' and 'current_container', and pointing them
13500         to the enclosing class/container.
13501         (CSharpParser): Initialize 'current_class' too.
13502         * decl.cs (MemberCore): Add check for invariant: a partial
13503         container is not a parsed entity, and thus does not enclose any
13504         parsed members.
13505         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
13506         (DeclSpace.BaseTypeExpr): Use it.
13507         (DeclSpace.LookupType): Add check for invariant.
13508         * class.cs (TypeContainer): Add check for invariant: a nested
13509         class should have the same NamespaceEntry as its enclosing class.
13510         (TypeContainer.EmitFieldInitializers): Make virtual.
13511         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
13512         MemberCore.
13513         (TypeContainer.Register): Remove.
13514         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
13515         null.  Use TypeResolveEmitContext for resolving base types and
13516         interfaces.  Move initialization of Parts.TypeBuilder here from
13517         ...
13518         (TypeContainer.DefineNestedTypes): ... here.
13519         (PartialContainer): Take a Namespace not a NamespaceEntry.
13520         (PartialContainer.Create): Don't use Register.  Call the
13521         appropriate Add... function directly.
13522         (ClassPart): Take both the PartialContainer and the enclosing
13523         class as constructor arguments.
13524         (ClassPart.EmitFieldInitializers): Override.
13525         (ClassPart.PartFindNestedTypes): Remove.
13526         (FieldBase.GetInitializerExpression): Resolve the initializer
13527         expression in the emit context of the enclosing class.
13528         * tree.cs (RootTypes): Remove Register ().
13529         
13530 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
13531
13532         * cs-parser.jay: Removed CS0134.
13533         
13534         * driver.cs: Removed CS1901.
13535         
13536         * expression.cs (SizeOf.DoResolve): Don't report CS0233
13537         for predefined types.
13538
13539 2005-03-07  Duncan Mak  <duncan@novell.com>
13540
13541         * codegen.cs (Save):  Catch UnauthorizedAccessException as
13542         well. Fixes bug #73454.
13543
13544 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
13545
13546         * cs-tokenizer.cs (xtoken): Add CS1035.
13547         
13548         * class.cs (MethodData.Define): Add CS0683.
13549         (FieldMember.ctor): Add CS0681.
13550
13551 2005-03-07  Raja R Harinath  <rharinath@novell.com>
13552
13553         * ecore.cs (SimpleName.DoResolve): Rename from
13554         SimpleName.DoResolveAllowStatic.
13555         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
13556         Pass 'intermediate' flag to MemberStaticCheck.
13557         (SimpleName.MemberStaticCheck): Skip "static check" only in case
13558         of "intermediate" lookups via MemberAccess.
13559         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
13560         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
13561
13562 2005-03-07  Raja R Harinath  <rharinath@novell.com>
13563
13564         Fix #73394.
13565         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
13566         slipped in because of variable names that are identical to a
13567         builtin type's BCL equivalent ('string String;', 'int Int32;').
13568         (PropertyExpr.EmitInstance): Likewise.
13569
13570 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
13571
13572         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
13573         
13574         * report.cs (warning_ignore_table): Made public.
13575
13576 2005-03-04  Raja R Harinath  <rharinath@novell.com>
13577
13578         Fix #73282.
13579         * class.cs (MethodData.Emit): Pass 'container' to
13580         container.GetObsoleteAttribute instead of 'container.Parent'.
13581
13582 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
13583
13584         * cs-parser.jay: Add 1534 error test.
13585
13586         * iterators.cs (Yield.CheckContext): Add error 1629.
13587         (Iterator.ctor): Save unsafe modifier.
13588         (MoveNextMethod.DoEmit): Restore unsafe context.
13589
13590         * namespace.cs (UsingAlias): Better error message.
13591
13592 2005-03-03  Dan Winship  <danw@novell.com>
13593
13594         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
13595         the warning message [#73219]
13596
13597 2005-03-03  Raja R Harinath  <rharinath@novell.com>
13598
13599         Fix compile with MCS 1.0.0.0.
13600         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
13601         w_restore to not depend on string constant folding.
13602
13603 2005-03-03  Raja R Harinath  <rharinath@novell.com>
13604
13605         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
13606         CS0246 check to users who passed 'silent = false'.
13607         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
13608         check.
13609         (SimpleName.SimpleNameResolve): Update.
13610         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
13611         (MemberAccess.IdenticalNameAndTypeName): Update.
13612         * doc.cs (FindDocumentedTypeNonArray): Update.
13613
13614 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
13615
13616         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
13617         * parameters.cs (ComputeAndDefineParameters): Remove.
13618         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
13619         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
13620         Use GetParameterInfo.
13621
13622 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
13623
13624         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
13625
13626 2005-03-02  Raja R Harinath  <rharinath@novell.com>
13627
13628         Unify DeclSpace.LookupType and DeclSpace.FindType.
13629         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
13630         is in charge of defining nested types on demand.
13631         (DeclSpace.LookupType): Use it when the current_type is a
13632         TypeBuilder.  Use LookupTypeDirect for reflected types.
13633         (DeclSpace.FindType): Remove.
13634         (DeclSpace.LookupInterfaceOrClass): Likewise.
13635         (DeclSpace.DefineTypeAndParents): Likewise.
13636         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
13637         DeclSpace.LookupType.
13638         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
13639         * typemanager.cs (LookupType): Simplify.
13640         (AddUserType): Remove type from negative_hits.
13641         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
13642         * class.cs (TypeContainer.FindMembers): Move handling of nested
13643         types ...
13644         (TypeContainer.FindMembers_NestedTypes): ... here.
13645         (TypeContainer.FindNestedType): Implement override.
13646         (ClassPart.FindNestedType): Delegate to PartialContainer.
13647         (ClassPart.PartFindNestedType): Looks up the nested types of the
13648         part alone.
13649
13650 2005-03-02  Martin Baulig  <martin@ximian.com>
13651
13652         * class.cs (TypeContainer.DoDefineMembers): We also need a default
13653         static constructor in static classes.
13654
13655 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
13656
13657         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
13658         sizeParamIndex is not specified.
13659
13660 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
13661
13662         Fix #73117
13663         * report.cs (WarningMessage.IsEnabled): Missing null check.
13664
13665 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
13666
13667         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
13668         in the fields and not in the properties.
13669
13670 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
13671
13672         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
13673         fields as well.
13674
13675 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
13676
13677         * attribute.cs: Small refactoring (improved robustness).
13678         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
13679         (ValidateGuid): Removed.
13680         (Resolve): Removed referenced to above mentioned.
13681         (GetAttributeUsage): Made private and changed to work without
13682         class assistance.
13683         (GetIndexerAttributeValue): Don't crash.
13684         (GetConditionalAttributeValue): Ditto.
13685         (GetClsCompliantAttributeValue): Ditto.
13686         (ExtractSecurityPermissionSet): All attributes exceptions are
13687         error 648.
13688         (GetPropertyValue): New helper.
13689         (GetMethodImplOptions): New method.
13690         (DefinePInvokeMethod): Reuse common code. Implemented handling of
13691         some missing properties.
13692         
13693         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
13694         (Method.ApplyAttributeBuilder): Updated.
13695         
13696         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
13697         exception.
13698
13699 2005-02-28  Raja R Harinath  <rharinath@novell.com>
13700
13701         Fix #73052.
13702         * report.cs (Report.SymbolRelatedToPreviousError): Handle
13703         non-simple types (array, pointer, reference).
13704
13705 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
13706
13707         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
13708
13709         * class.cs (MethodCore.IsDuplicateImplementation): Special error
13710         for operators.
13711         (Method.CheckBase): Catch wrong destructor here.
13712         (MethodData.Define): Add errors 550, 668.
13713
13714         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
13715
13716         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
13717
13718         * pending.cs (VerifyPendingMethods): Add error 551.
13719
13720         * typemanager.cs (CSharpName): Next error report helper.
13721
13722 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
13723
13724         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
13725         attributes. Removed useless attribute double check.
13726         It saves almost 2MBs for corlib.
13727
13728 2005-02-25  Raja R Harinath  <rharinath@novell.com>
13729
13730         Fix #72924.
13731         * statement.cs (ExpressionStatement.Resolve): Make robust to being
13732         called twice in case of error.
13733
13734 2005-02-23  Chris Toshok  <toshok@ximian.com>
13735
13736         Fix compiler portions of #72827.
13737         * statement.cs (Block.Emit): call Begin/EndScope on the
13738         EmitContext instead of the ILGenerator.
13739
13740         * codegen.cs (EmitContext.BeginScope): new method, call
13741         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
13742         we have one.)
13743         (EmitContext.BeginScope): same, but EndScope and CloseScope
13744
13745         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
13746         offset and call the superclass's OpenScope(int) with it.
13747         (SymbolWriter.CloseScope): get the current il
13748         offset and call superclass's CloseScope(int) with it.
13749
13750 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
13751
13752         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
13753         CS1677 for out and ref as well.
13754
13755         * class.cs (Method.Define): Add error CS1599 detection.
13756         
13757         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
13758         
13759         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
13760         
13761         * delegate.cs (Delegate.Define): Add error CS1599 detection.
13762         
13763         * support.cs.cs (ModifierDesc): New helper method.
13764
13765 2005-02-23  Raja R Harinath  <rharinath@novell.com>
13766             Abin Thomas  <projectmonokochi@rediffmail.com>
13767             Anoob V E  <projectmonokochi@rediffmail.com>
13768             Harilal P R  <projectmonokochi@rediffmail.com>
13769
13770         Fix #57851, #72718.
13771         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
13772         MemberLookup (used for error reporting) actually returns a result.
13773         Fix error report number (122, not 112).
13774
13775 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
13776             Anoob V E  <projectmonokochi@rediffmail.com>
13777             Harilal P R  <projectmonokochi@rediffmail.com>
13778
13779         Fix #71134.
13780         * pending.cs (PendingImplementation.GetAbstractMethods):
13781         Find NonPublic members too.
13782
13783 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
13784
13785         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
13786         Fixed error 217.
13787         
13788         * class.cs (MethodCore.CheckMethodAgainstBase):
13789         Add error 239 report.
13790
13791 2005-02-21  Raja R Harinath  <rharinath@novell.com>
13792
13793         Fix #68955.
13794         * expression.cs (Invocation.IsApplicable): Make public.
13795         (Invocation.IsParamsMethodApplicable): Likewise.
13796         * delegate.cs (Delegate.VerifyApplicability): Don't use
13797         Invocation.VerifyArgumentCompat for parameter applicability
13798         testing.  Use Invocation.IsApplicable and
13799         Invocation.IsParamsMethodApplicable.
13800
13801 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
13802
13803         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
13804         
13805         * class.cs (Operator.Define): Add error 217 report.
13806         
13807 2005-02-21  Raja R Harinath  <rharinath@novell.com>
13808
13809         * namespace.cs (UsingEntry.Resolve): Undo change below.
13810
13811 2005-02-21  Raja R Harinath  <rharinath@novell.com>
13812
13813         Fix #72756.
13814         * ecore.cs (Expression.MemberLookupFailed): Add argument to
13815         disable the error message when the extended MemberLookup also
13816         fails.
13817         (Expression.MemberLookupFinal): Update.
13818         (SimpleName.DoSimpleNameResolve): Update.
13819         * expression.cs (MemberAccess.ResolveNamespaceOrType):
13820         Don't use MemberLookupFinal.
13821         (New.DoResolve): Update.
13822         (BaseAccess.CommonResolve): Update.
13823
13824 2005-02-21  Raja R Harinath  <rharinath@novell.com>
13825
13826         Fix #72732.
13827         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
13828         occured previously, don't resolve again.
13829
13830 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
13831
13832         Fix #69949
13833         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
13834         argument. Call ResolveAttributeUsage for unresolved.
13835         when types doesn't match ctor arguments.
13836         
13837         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
13838         for nested attribute classes.
13839         (Class.attribute_usage): Removed.
13840         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
13841         for attribute class.
13842         
13843         * ecore.cs (IsAttribute): Removed.
13844         
13845         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
13846         
13847         * rootcontext.cs (RegisterAttribute): Removed, attributes are
13848         now normal types.
13849         (attribute_types): Removed.
13850         (EmitCode): Global attributes are emited as the latest.
13851
13852 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
13853
13854         * class.cs (EmitFieldInitializers): Don't emit field initializer
13855         for default values when optimilization is on.
13856         
13857         * constant.cs (Constant.IsDefaultValue): New property.
13858         
13859         * driver.cs: Add /optimize handling.
13860         
13861         * constant.cs,
13862         * ecore.cs,
13863         * literal.cs: Implement new IsDefaultValue property.
13864         
13865         * rootcontext.cs (Optimize): New field, holds /optimize option.
13866
13867 2005-02-18  Raja R Harinath  <rharinath@novell.com>
13868
13869         Fix crasher in re-opened #72347.
13870         * namespace.cs (Namespace.Lookup): Return null if
13871         DeclSpace.DefineType returns null.
13872
13873         Fix #72678.
13874         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
13875
13876 2005-02-18  Raja R Harinath  <rharinath@novell.com>
13877
13878         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
13879         now returns null if it cannot resolve to an lvalue.
13880         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
13881         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
13882         returned null.  Remove check for SimpleName.
13883         (EventExpr.DoResolveLValue): New.
13884         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
13885         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
13886         error from ...
13887         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
13888         avoid CS0131 error.
13889         (Unary.ResolveOperator): Move CS0211 check ...
13890         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
13891         CS0131 error.
13892         (Unary.DoResolveLValue): Simplify.
13893         (AddressOf.DoResolveLValue): New.
13894         (ArrayAccess.DoResolveLValue): New.
13895
13896 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
13897
13898         * attribute.cs (Attribute.Resolve): Add arguments casting for
13899         when types doesn't match ctor arguments.
13900
13901 2005-02-16  Raja R Harinath  <rharinath@novell.com>
13902
13903         Fix parts of #63202.
13904         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
13905         lookup of operator in base type.  Ensure that all checks happen
13906         when the operator resolves to an "op_..." method.
13907
13908 2005-02-15  Raja R Harinath  <rharinath@novell.com>
13909
13910         Fix #71992.
13911         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
13912         'ignore_cs0104' parameter.  Pass it to ...
13913         (NamespaceEntry.Lookup): ... this.
13914         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
13915         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
13916         (TypeLookupExpression.DoResolveAsTypeStep): Update.
13917         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
13918         Update.  Request that cs0104 errors be ignored.
13919         (ComposedCast.ResolveAsTypeStep): Update.
13920
13921 2005-02-14  Raja R Harinath  <rharinath@novell.com>
13922
13923         Fix #59209.
13924         * expression.cs (Invocation.BetterFunction): Remove support for
13925         comparing virtual functions and their overrides.
13926         (Invocation.IsOverride): New.
13927         (Invocation.OverloadResolve): Don't consider 'override' functions
13928         during candidate selection.  Store them in a lookaside list.
13929         If the selected method is a 'virtual' function, use the list to
13930         find any overrides that are closer to the LHS type.
13931
13932 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
13933
13934         * expression.cs (New.DoResolve): Add complex core type reduction.
13935         (New.Constantify): Converts complex core type syntax like 'new int ()'
13936         to simple constant.
13937         
13938 2005-02-14  Raja R Harinath  <rharinath@novell.com>
13939
13940         * decl.cs (EntryType.EntryType): New constructor to create an
13941         updated copy of a cache entry.
13942         (MemberCache.AddMethods): Use it.
13943         (MemberCache.ClearDeclaredOnly): Remove.
13944         (MemberCache.MemberCache): Update.
13945
13946 2005-02-11  Miguel de Icaza  <miguel@novell.com>
13947
13948         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
13949         variable.  This one is represents the actual low-level declaration
13950         of the method, as opposed to the semantic level `IsStatic'.   
13951
13952         An anonymous method which is hosted into a static method might be
13953         actually an instance method.  IsStatic would reflect the
13954         container, while MethodIsStatic represents the actual code
13955         generated.
13956
13957         * expression.cs (ParameterReference): Use the new MethodIsStatic
13958         instead of IsStatic.
13959
13960         * anonymous.cs (AnonymousMethod.Compatible): Pass the
13961         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
13962         set on the current EmitContext. 
13963
13964         * expression.cs (Cast): Overload DoResolveLValue so we can pass
13965         resolve our casted expression as an LValue.  This triggers the
13966         proper LValue processing that is later required by Assign.
13967
13968         This fixes 72347.
13969
13970         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
13971
13972 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
13973
13974         C# 2.0 Fixed buffer implementation
13975
13976         * anonymous.cs: Update after RegisterHelperClass renaming.
13977
13978         * attribute.cs (AttributeTester.fixed_buffer_cache):
13979         Cache of external fixed buffers.
13980         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
13981         implementation if field is fixed buffer else null.
13982
13983         * class.cs
13984         (TypeContainer.AddField): Accept FieldMember instead of Field.
13985         (FieldBase.IsFieldClsCompliant): Extracted code from
13986         VerifyClsCompliance descendant customization.
13987         (FixedField): New class handles fixed buffer fields.
13988         (FixedFieldExternal): Keeps information about imported fixed
13989         buffer.
13990         (IFixedField): Make access to internal or external fixed buffer
13991         same.
13992
13993         * cs-parser.jay: Add fixed buffer parsing.
13994
13995         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
13996         buffer.
13997
13998         * expression.cs (Indirection): Extended implementation to accept
13999         fixed buffer field.
14000         (PointerArithmetic.Emit): Get element from fixed buffer as well.
14001         (ElementAccess.MakePointerAccess): Get type as parameter.
14002         (DoResolve): Add fixed buffer field expression conversion.
14003         (DoResolveLValue): Ditto.
14004         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
14005         (ArrayPtr): Derives from FixedBufferPtr.
14006         (ArrayPtr.Emit): Add extra emit for array elements.
14007
14008         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
14009
14010         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
14011         for compiler generated types.
14012         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
14013
14014         * statement.cs (Fixed): Refactored to be easier add fixed buffer
14015         and consume less memory.
14016         (Fixed.Resolve): Add fixed buffer case.
14017
14018         * typemanager.cs (compiler_generated_attr_ctor,
14019         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
14020         (HasElementType): Add our own implementation to work on every
14021         runtime.
14022
14023 2005-02-11  Miguel de Icaza  <miguel@novell.com>
14024
14025         * anonymous.cs (CaptureContext): Track whether `this' has been
14026         referenced.   
14027
14028         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
14029         only captured `this' if it was implicitly done (instance
14030         methods/variables were used). 
14031
14032         * codegen.cs (EmitContext.CaptureThis): New method to flag that
14033         `this' must be captured.
14034
14035 2005-01-30  Miguel de Icaza  <miguel@novell.com>
14036  
14037         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
14038         is null it means that there has been no need to capture anything,
14039         so we just create a sibling.
14040
14041         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
14042
14043         Just a partial fix.  The other half is fairly elusive.
14044         
14045 2005-02-10  Raja R Harinath  <rharinath@novell.com>
14046
14047         Fix #52586, cs0121-4.cs.
14048         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
14049         and return a hashtable.
14050         (MemberCache.ClearDeclaredOnly): New.
14051         (MemberCache.MemberCache): Update to change.  Make a deep copy of
14052         the method_hash of a base type too.
14053         (MemberCache.AddMethods): Adapt to having a deep copy of the base
14054         type methods.  Overwrite entries with the same MethodHandle so
14055         that the ReflectedType is correct.  The process leaves in base
14056         virtual functions and their overrides as distinct entries.
14057         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
14058         matters since it was boxed in a ArrayList before.
14059         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
14060         modifier.
14061         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
14062         case of a virtual function and its override (choose the overload
14063         as better).
14064         (Invocation.OverloadResolve): Avoid 'override' members during
14065         'applicable_type' calculation.
14066
14067 2005-02-09  Raja R Harinath  <rharinath@novell.com>
14068
14069         Combine two near-redundant caches.
14070         * typemanager.cs (method_params): Rename from method_internal_params.
14071         (TypeManager.GetParameterData): New.  Replace
14072         Invocation.GetParameterData.
14073         (TypeManager.LookupParametersByBuilder): Remove.
14074         * expression.cs (Invocation.method_parameter_cache): Remove.
14075         (Invocation.GetParameterData): Remove.
14076         Update to changes.
14077         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
14078         Update to changes.
14079
14080 2005-02-08  Raja R Harinath  <rharinath@novell.com>
14081
14082         Fix #72015.
14083         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
14084         TypeManager.multicast_delegate_type is null, resolve it by looking
14085         up "System.MulticastDelegate".
14086         * rootcontext.cs (RootContext.ResolveCore): Simplify.
14087
14088 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
14089             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
14090             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
14091
14092         Fix cs0164.cs.
14093         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
14094         (LabeledStatement.AddReference): New.  Set 'referenced'.
14095         (Goto.Resolve): Use it.
14096
14097 2005-02-05  John Luke  <john.luke@gmail.com>
14098
14099         * driver.cs: remove duplicate -doc line in Usage ()
14100
14101 2005-02-04  Raja R Harinath  <rharinath@novell.com>
14102
14103         * location.cs (Location.AddFile): Fix CS2002 error report.
14104
14105 2005-02-02  Martin Baulig  <martin@ximian.com>
14106
14107         * delegate.cs (Delegate.DefineType): Report an internal error if
14108         TypeManager.multicast_delegate_type is null.  See bug #72015 for
14109         details.        
14110
14111 2005-02-02  Raja R Harinath  <rharinath@novell.com>
14112
14113         Fix a crasher in a variant of #31984.
14114         * const.cs (Constant.CheckBase): New override that defers the
14115         new-or-override check in case the base type hasn't been populated
14116         yet.
14117         (Constant.Define): Ensure the new-or-override check is performed.
14118
14119 2005-02-01  Duncan Mak  <duncan@ximian.com>
14120
14121         * const.cs (LookupConstantValue): Check that `ce' is not null
14122         before calling GetValue ().
14123
14124 2005-02-01  Raja R Harinath  <rharinath@novell.com>
14125
14126         Fix test-334.cs (#69519).
14127         * cs-parser.jay (using_alias_directive): Pass in an expression to
14128         NamespaceEntry.UsingAlias.
14129         (using_namespace_directive): Pass in an expression to
14130         NamespaceEntry.Using.
14131         (namespace_name): Don't flatten to a string.
14132         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
14133         (NamespaceEntry.AliasEntry.Resolve): Lookup using
14134         ResolveAsTypeStep.
14135         (NamespaceEntry.UsingEntry): Likewise.
14136         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
14137         changes.
14138         (NamespaceEntry.LookupForUsing): Remove.
14139         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
14140         names.
14141         (NamespaceEntry.Lookup): Remove support for dotted names.
14142
14143 2005-02-01  Raja R Harinath  <rharinath@novell.com>
14144
14145         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
14146         split into two.
14147         (NamespaceEntry.ImplicitParent): Compute on demand.
14148         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
14149         parallels the current.
14150         (NamespaceEntry.LookupForUsing): Use it.
14151         (NamespaceEntry.Lookup): If the current namespace-entry is
14152         implicit, don't search aliases and using tables.
14153
14154 2005-02-01  Raja R Harinath  <rharinath@novell.com>
14155
14156         Fix #31984.
14157         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
14158         BaseCache here.
14159         (TypeContainer.BaseCache): Compute on demand.
14160         (TypeContainer.FindMembers): Define constants and types if they're
14161         not already created.
14162         (FieldMember.Define): Move resetting of ec.InUnsafe before error
14163         check.
14164         * const.cs (Constant.Define): Make idempotent.
14165
14166 2005-01-29  Miguel de Icaza  <miguel@novell.com>
14167
14168         * pending.cs: Produce better code (no nops produced by using Ldarg
14169         + value).
14170         
14171         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
14172         i - 1' it should be arg + 1.
14173
14174         Fixes bug #71819.
14175
14176 2005-01-28  Raja R Harinath  <rharinath@novell.com>
14177
14178         * attribute.cs (Attribute.CheckAttributeType): Make private
14179         non-virtual.
14180         (Attribute.ResolveType): Make virtual.
14181         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
14182         handling of RootContext.Tree.Types.
14183
14184 2005-01-27  Raja R Harinath  <rharinath@novell.com>
14185
14186         Update attribute-handling to use the SimpleName/MemberAccess
14187         mechanisms.
14188         * cs-parser.jay (attribute): Pass in an expression to the
14189         constructors of Attribute and GlobalAttribute.
14190         * attribute.cs (Attribute): Take an expression for the name.
14191         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
14192         passed in attribute name expression.
14193         (Attribute.CheckAttributeType): Use it.
14194         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
14195         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
14196         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
14197         argument to prevent error messages if the lookup fails.
14198
14199 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
14200
14201         * expression.cs (Indirection): Implemented IVariable interface
14202         to support indirection in AddressOf operator.
14203         (PointerArithmetic.Emit): Add optimalization for case where
14204         result can be precomputed.
14205
14206 2005-01-26  Martin Baulig  <martin@ximian.com>
14207
14208         * class.cs (TypeContainer.AttributeTargets): Return the correct
14209         AttributeTargets depending on our `Kind' instead of throwing an
14210         exception; fixes #71632.
14211
14212 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
14213
14214         Fix #71257
14215         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
14216         constant members.
14217
14218 2005-01-25  Raja R Harinath  <rharinath@novell.com>
14219
14220         Fix #71602.
14221         * expression.cs (MemberAccess.DoResolve): Don't complain with
14222         cs0572 when the LHS of a member access has identical name and type
14223         name.
14224
14225 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
14226
14227         Fix #71651, #71675
14228         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
14229         CreatePermission.
14230         Create custom PermissionSet only for PermissionSetAttribute.
14231
14232 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
14233
14234         Fix #71649
14235         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
14236         delegates in static class.
14237
14238 2005-01-24  Martin Baulig  <martin@ximian.com>
14239
14240         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
14241         merging an implicit block, just use its reachability.
14242
14243         * statement.cs (Block.Resolve): Make the unreachable code check
14244         work wrt. implicit blocks; see test-337 from #63842.
14245
14246 2005-01-21  Alp Toker  <alp@atoker.com>
14247  
14248         * cs-parser.jay: destructor_declaration's container is PartialContainer
14249         not Class when partial types are used, so use Kind prop instead of
14250         'is'.
14251         
14252 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
14253
14254         * cs-parser.jay: Improve error reporting when an interface
14255         declares new types.
14256
14257 2005-01-20  Dick Porter  <dick@ximian.com>
14258
14259         * support.cs: SeekableStreamReader fix from Sandor Dobos
14260         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
14261         chars are read.  Fixes bug 70369.
14262
14263 2005-01-20  Raja R Harinath  <rharinath@novell.com>
14264
14265         * cs-parser.jay (catch_clause): Simplify current_block handling
14266         somewhat.
14267
14268 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
14269
14270         * convert.cs (ImplicitStandardConversionExists): Synchronize the
14271         code with ImplicitStandardConversion to handle the implicit
14272         conversion of method groups into valid delegate invocations. 
14273
14274         The problem is that in parameter handling we were using this code
14275         path.  Fixes bug #64698
14276
14277 2005-01-19  Raja R Harinath  <rharinath@novell.com>
14278
14279         * cs-parser.jay: Fix several infelicities.
14280         - Avoid assigning to the parser value stack.  Code like 
14281           '$3 = null' is unclean.  Synthesize a value for the code block
14282           instead. 
14283         - Avoid using oob_stack for storing location information.  Use ...
14284         (_mark_): ... this.  New (empty) rule.  Saves the current location
14285         in $$.
14286         (foreach_statement): Avoid using oob_stack for current_block
14287         handling.  Use technique used in for_statement and
14288         using_statement.  Synthesize a value for the code block to store
14289         additional intermediate information.
14290
14291 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
14292
14293         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
14294         of a different type is only allowed to private fields of a
14295         containing type, not on fields of a base class.
14296
14297         See test-174.cs and error cs0122-9.cs
14298
14299 2005-01-13  Raja R Harinath  <rharinath@novell.com>
14300
14301         Fix test-335.cs (bug #58126).
14302         * cs-parser.jay (argument): Split out non-expression parts of the
14303         rule into 'non_simple_argument'.
14304         (invocation_expression): Support parenthesized invocations with
14305         multiple arguments, and with single non-simple arguments.
14306
14307 2005-01-13  Raja R Harinath  <rharinath@novell.com>
14308
14309         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
14310         places.
14311
14312 2005-01-12  Raja R Harinath  <rharinath@novell.com>
14313
14314         Fix cs0038-1.cs, cs1640-6.cs.
14315         * ecore.cs (Expression.Resolve): Remove special-case for
14316         SimpleName in error-handling.
14317         (Expression.almostMatchedMembers): Relax access permission to
14318         protected.
14319         (Expression.MemberLookupFailed): Handle duplicates in
14320         almostMatchedMembers list.
14321         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
14322         * expression.cs (New.DoResolve): Report CS1540 for more cases.
14323         * typemanager.cs (GetFullNameSignature): Use the MethodBase
14324         overload if the passed in MemberInfo is a MethodBase.
14325
14326 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
14327
14328         Fix #70749
14329         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
14330         for non-CAS & merge permission sets properly.
14331
14332 2005-01-11  Raja R Harinath  <rharinath@novell.com>
14333
14334         Improve standard-compliance of simple name and member access 
14335         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
14336         * ecore.cs (FullNamedExpression): New abstract base class 
14337         for Namespaces and TypeExpressions.
14338         (ResolveFlags.SimpleName): Remove.
14339         (SimpleName): Remove support for dotted names.
14340         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
14341         DeclSpace.FindType and DeclSpace.LookupType.
14342         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
14343         (Expression.ExprClassName): Make member function.
14344         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
14345         a namespace.  Remove creation of dotted "SimpleName"s.
14346         (MemberAccess.DoResolve): Likewise.
14347         * decl.cs (DeclSpace.Cache): Make private.
14348         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
14349         (DeclSpace.FindType): Update.
14350         (DeclSpace.LookupType): Move here from RootContext.  Return a 
14351         FullNamedExpression.
14352         * namespace.cs (Namespace): Derive from FullNamedExpression
14353         so that it can be part of expression resolution.
14354         (Namespace.Lookup): Return an FullNamedExpression.
14355         (NamespaceEntry.LookupAlias): Lookup aliases only in current
14356         namespace.
14357         * rootcontext.cs (NamespaceLookup): Remove.
14358         (LookupType): Move to DeclSpace.
14359         * attribute.cs (CheckAttributeType): Update.
14360         * doc.cs (FindDocumentedType): Remove allowAlias argument.
14361         (FindDocumentedTypeNonArray): Likewise.
14362
14363 2005-01-11  Raja R Harinath  <rharinath@novell.com>
14364
14365         Fix cs0509.cs, cs1632.cs.
14366         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
14367         is the same as IsInterface.
14368         (TypeContainer.GetClassBases): Likewise.
14369         * statement.cs (LabeledStatement.ig): New field.
14370         (LabeledStatement.LabelTarget): Save ILGenerator which created the
14371         label.
14372         (LabeledStatement.DoEmit): Check that the label was created with
14373         the same ILGenerator.
14374
14375 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
14376
14377         Fix #71058
14378         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
14379         accessors to its properties.
14380
14381         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
14382         from accessors to property.
14383         
14384 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
14385
14386         Fix #70722
14387         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
14388         only for overrides.
14389         
14390 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
14391
14392         * attribute.cs: Check for null and empty strings.  
14393
14394         I have lost another battle to Paolo.
14395
14396 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
14397
14398         Fix #70942
14399         * class.cs (PropertyMethod): Set Parent field in ctors.
14400         (SetMethod.InternalParameters): Add unsafe switch hack.
14401         Override MarkForDuplicationCheck where it is appropriate.
14402
14403         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
14404         It says whether container allows members with the same name.
14405         Base default is no.
14406         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
14407         Removed is_method parameter.
14408
14409 2005-01-06  Duncan Mak  <duncan@ximian.com>
14410
14411         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
14412         because the previous change led to incorrect reporting of CS1032
14413         ("Cannot define/undefine preprocessor symbols after first token in
14414         file"). Instead of using `tokens_seen' as the only flag that
14415         triggers CS1040, introduce `comments_seen'. This new flag is used
14416         to signify having seen comments on the current line, so it is
14417         unset after a newline.
14418
14419 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
14420
14421         * doc.cs : When searching for a type, find nested type too.
14422           This fixes bug #71040.
14423
14424 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
14425
14426         * doc.cs :
14427           - Warn missing member comment on those classes which also does not
14428             have doc comments. Fixed bug #71041.
14429           - Don't warn missing doc comment on default constructor.
14430             Fixed bug #71042.
14431
14432 2005-01-06  Duncan Mak  <duncan@ximian.com>
14433
14434         * cs-tokenizer.cs (xtoken): After handling traditional C-style
14435         comments, set `tokens_seen' to true. This allows us to detect
14436         misplaced preprocessor directives (i.e. not at the beginning of
14437         the a line, nor after whitespaces). In that case, report error
14438         CS1040. This fixes bug #56460.
14439
14440         * cs-parser.jay (interface_member_declaration): Add checks for
14441         IsExplicitImpl, and report CS0541 error if an interface member is
14442         defined as an explicit interface declaration.
14443
14444 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
14445
14446         Fix #70817
14447         * class.cs (PropertyMethod): Set Parent field in ctors.
14448         (SetMethod.InternalParameters): Add unsafe switch hack.
14449         
14450         * decl.cs (MemberCore.Parent): Cannot be readonly.
14451
14452 2005-01-06  Raja R Harinath  <rharinath@novell.com>
14453
14454         * decl.cs (DeclSpace.ResolveType): Remove.
14455         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
14456         Merge in code from ...
14457         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
14458         * class.cs, enum.cs: Update to changes.
14459
14460 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
14461
14462         * anonymous.cs: Ensure that we init the scope of our parent if it
14463         has not been initialized yet.
14464
14465 2004-12-30  Duncan Mak  <duncan@ximian.com>
14466
14467         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
14468         if field.FieldBuilder is null. Fixes #70758.
14469
14470         * convert.cs: Fixed some typos and updated some of the comments.
14471         (ImplicitStandardConversionExists):
14472         (TryImplicitIntConversion): If `target_type' is an interface and
14473         the type of `ic' implements this interface, return true or a new
14474         BoxedCast instead of null. This fixes #70468.
14475
14476 2004-12-29  Duncan Mak  <duncan@ximian.com>
14477
14478         * expression.cs (Argument.Emit): Check that Expr is
14479         IMemoryLocation before casting to it, and report CS1510 otherwise.
14480
14481         This fixes #70402.
14482
14483 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
14484
14485         * statement.cs (Block.ThisVariable): remove the recursion here, to
14486         make the --profile more sane.
14487
14488 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
14489
14490         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
14491         assembly, by JB Evain.
14492
14493 2004-12-17  Raja R Harinath  <rharinath@novell.com>
14494
14495         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
14496           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
14497         "parent" refers to enclosing type/class.  "base" refers to superclass.
14498
14499 2004-12-17  Raja R Harinath  <rharinath@novell.com>
14500
14501         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
14502         Ensure that we only have GlobalAttributes.
14503         * attribute.cs (Attribute.Emit): Make non-virtual.
14504         (GlobalAttribute.Emit): Remove.
14505         (Attribute.Resolve): Make virtual.
14506         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
14507         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
14508         the argument. Don't create one.
14509         (Attribute.GetObsoleteAttribute): Likewise.
14510         (Attribute.GetClsCompliantAttributeValue): Likewise.
14511         * class.cs, decl.cs: Update to changes.
14512
14513 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
14514
14515         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
14516         
14517         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
14518         
14519         * statement.cs (Foreach.Resolve): Add error 186 report.
14520
14521 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
14522
14523         * expression.cs (Conditional.DoResolve): Add warning 429.
14524         
14525         * statement.cs (If.Resolve): Add warning 665.
14526
14527 2004-12-16  Raja R Harinath  <rharinath@novell.com>
14528
14529         New invariant: RootContext.Tree.Types.NamespaceEntry == null
14530         except when in the parser, and in GlobalAttribute.
14531         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
14532         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
14533         RootContext.Tree.Types.NamespaceEntry once work is done.
14534         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
14535         and resets RootContext.Tree.Types.NamespaceEntry.
14536
14537 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
14538
14539         * cs-parser.jay: Don't create a block for every variable.
14540
14541 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
14542
14543         * location.cs: Provide extra information.
14544
14545         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
14546         variables from the captured environment, it is the ldarg_0.
14547
14548 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
14549
14550         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
14551         find a conclusion.
14552         
14553         * class.cs: Changed warning level for 169 to avoid developer
14554         displeasure from warning flooding. It will be changed back when they
14555         fix most of current BCL warnings.
14556         
14557         * RootContext.cs: Pushed default WarningLevel to 3.
14558         
14559         * statement.cs: Removed unused variable.
14560
14561 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
14562
14563         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
14564         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
14565         Add error 502 report.
14566         (StaticClass.DefineType): Add error 441 report.
14567         (Class.AllowedModifiersProp): New virtual property as temporary
14568         extension to AllowedModifiers.
14569         (Class.DefineType): Add error 418 report. Moved ModFlags check here
14570         to share implementation with StaticClass and don't call virtual
14571         methods from ctor.
14572         
14573         * driver.cs (MainDriver): Add error 1558 test.
14574
14575         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
14576         report. Moved error 36 test here.
14577
14578         * statement.cs (Throw.Resolve): Add error 724 report.
14579
14580         * typemanager.cs: Add out_attribute_type core type.
14581         
14582 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
14583
14584         * class.cs (TypeContainer.VerifyClsCompliance): Add error
14585         3018 report.
14586         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
14587
14588         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
14589         3017 report.
14590         
14591         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
14592
14593         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
14594         Add error 3023 report.
14595         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
14596
14597         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
14598         implementation.
14599
14600 2004-12-12  John Luke  <john.luke@gmail.com>
14601
14602         * driver.cs (AddArgs): take -- into account when
14603         adding arguments, fixes bug 65710 
14604
14605 2004-12-12  Martin Baulig  <martin@ximian.com>
14606
14607         * expression.cs (Unary.TryReduceNegative): Added support for
14608         SByteConstant and ByteConstant.
14609         (Unary.Reduce): Check error values from TryReduceNegative().
14610
14611 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
14612
14613         * attributes.cs (Attribute.Resolve): Avoid multiple error report
14614         and report exception as error 182.
14615
14616 2004-12-10  Raja R Harinath  <rharinath@novell.com>
14617
14618         * driver.cs (Main): Fix message when there are warnings.
14619
14620 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
14621
14622         * delegate.cs: Fixed my fix from yesterday, sorry about that.
14623
14624 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
14625
14626         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
14627         Reduced number of warnings.
14628         
14629         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
14630
14631 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
14632
14633         * driver.cs: Removed message.
14634
14635         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
14636
14637 2004-12-08    <vargaz@freemail.hu>
14638
14639         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
14640
14641 2004-12-08  Martin Baulig  <martin@ximian.com>
14642
14643         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
14644         instead of a CS3002 for properties and indexer.
14645
14646 2004-12-08  Martin Baulig  <martin@ximian.com>
14647
14648         * decl.cs (MemberName.ToString): Make this work again.
14649
14650 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
14651
14652         * attribute.cs (Resolve): Add error 591 detection.
14653
14654         * class.cs (FieldMember.Define): Add error 1547 detection.
14655         (Indexer.Define): Add error 620 detection.
14656         (Operator.Define): Add error 590 detection.
14657
14658         * ecore.cs: Missing argument for error 79.
14659
14660         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
14661         detection.
14662
14663 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
14664
14665         Fix #70106
14666         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
14667         only.
14668
14669 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
14670
14671         * cs-parser.jay : handle doc comments on implicit/explicit operators.
14672           Some operator comments were suppressed.
14673         * doc.cs : Implicit/explicit operator name in doc comments are like
14674           "op_Explicit(type)~returnType", so added suffix handling.
14675
14676 2004-12-07  Martin Baulig  <martin@ximian.com>
14677
14678         * decl.cs
14679         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
14680         (MemberCore.GetClsCompliantAttributeValue): Likewise.
14681         (DeclSpace.ec): New protected field; store the EmitContext here.
14682         (DeclSpace.EmitContext): New public property; moved here from
14683         `TypeContainer'.
14684         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
14685         EmitContext.
14686
14687         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
14688         (Enum.Emit): Don't create a new EmitContext.
14689
14690         * delegate.cs (Delegate.DefineType): Always create the
14691         EmitContext.
14692
14693         * iterators.cs (Iterators.DefineIterator): Create a new
14694         EmitContext and store it in `ec'.
14695
14696 2004-08-24  Martin Baulig  <martin@ximian.com>
14697
14698         * typemanager.cs
14699         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
14700         this for accessibility checks.
14701         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
14702         IsNestedFamilyAccessible.
14703         (TypeManager.IsSubclassOf): New method, do what the name actually
14704         says.   
14705
14706 2004-12-06  Raja R Harinath  <rharinath@novell.com>
14707
14708         Fix crash on cs0657-17.cs.
14709         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
14710         Use RootContext.Tree.Types, not 'new RootTypes ()'.
14711         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
14712         the case where the NamespaceEntry gets overwritten.
14713
14714 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
14715
14716         Fixed #69195, #56821
14717         * ecore.cs (ResolveBoolean): Tiny refactoring.
14718
14719         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
14720         of right expression resolving when left is false constant and
14721         operator is LogicalAnd OR true constant and operator is LogicalOr.
14722
14723         * statement.cs (ResolveUnreachable): Always reports warning.
14724
14725 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
14726
14727         * class.cs: Distinguish between 1721 and 1722 (just a little help
14728         for the programmer).
14729
14730 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
14731
14732         * delegate.cs: Only allow this on new versions of the language. 
14733
14734 2004-12-02  Duncan Mak  <duncan@ximian.com>
14735
14736         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
14737         Expression class.
14738         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
14739         here as a static method. Take an additional bool out parameter
14740         `must_do_cs1540_check' for signaling to InstanceResolve.
14741         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
14742         member field from PropertyExpr class and made it an argument of
14743         the method instead.
14744         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
14745         check for MarshalByRefObject, and report CS0122 instead of CS1540.
14746         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
14747         and `remove_accessor' as well as InstanceResolve: report CS0122
14748         where applicable.
14749
14750         Fixes #70129.
14751
14752 2004-12-03  Raja R Harinath  <rharinath@novell.com>
14753
14754         Fix test-327.cs, test-328.cs, and put in early infrastructure
14755         for eventually fixing #52697.
14756         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
14757         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
14758         from other methods.
14759         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
14760         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
14761         (VerifyUsing, error246): Update.
14762         * rootcontext.cs (RootContext.NamespaceLookup): Just use
14763         'NamespaceEntry.LookupNamespaceOrType'.
14764
14765 2004-12-03  Martin Baulig  <martin@ximian.com>
14766
14767         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
14768         method as our child, call AnonymousMethod.Compatible() on it.
14769
14770 2004-12-03  Raja R Harinath  <rharinath@novell.com>
14771
14772         Disable XML documentation support in 'basic' profile.
14773         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
14774         Redirect XmlElement to System.Object.
14775         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
14776         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
14777         * mcs.exe.sources: Add doc-bootstrap.cs.
14778         * doc-bootstrap.cs: New file.  Contains empty stub implementation
14779         of doc.cs.
14780
14781 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
14782
14783         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
14784           comments are allowed.
14785
14786 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
14787
14788         * delegate.cs: Add checks for subtypes in paramaters and return values
14789         in VerifyMethod () to add support for Covariance/Contravariance
14790         in delegates.
14791         
14792 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
14793
14794         * report.cs: Remove extra closing parenthesis.
14795
14796         * convert.cs (Error_CannotImplicitConversion): If the name of the
14797         types are the same, provide some extra information.
14798
14799         * class.cs (FieldBase): Use an unused bit field from the field to
14800         encode the `has_offset' property from the FieldMember.  This saves
14801         a couple of Ks on bootstrap compilation.
14802
14803         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
14804         method as our child, return the AnonymousMethod resolved
14805         expression.
14806
14807         * expression.cs (New.DoResolve): Allow return values from
14808         NewDelegate to also include AnonymousMethods.
14809
14810         Fixes #70150.
14811
14812 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
14813
14814         Fix bug #70102
14815         * attribute.cs (Resolve): Improved implementation of params
14816         attribute arguments.
14817
14818         * support.cs (ParameterData): Add HasParams to be faster.
14819
14820 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
14821
14822         all things are for /doc support:
14823
14824         * doc.cs: new file that supports XML documentation generation.
14825         * mcs.exe.sources: added doc.cs.
14826         * driver.cs:
14827           Handle /doc command line option.
14828           Report error 2006 instead of 5 for missing file name for /doc.
14829           Generate XML documentation when required, after type resolution.
14830         * cs-tokenizer.cs:
14831           Added support for picking up documentation (/// and /** ... */),
14832           including a new XmlCommentState enumeration.
14833         * cs-parser.jay:
14834           Added lines to fill Documentation element for field, constant,
14835           property, indexer, method, constructor, destructor, operator, event
14836           and class, struct, interface, delegate, enum.
14837           Added lines to warn incorrect comment.
14838         * rootcontext.cs :
14839           Added Documentation field (passed only when /doc was specified).
14840         * decl.cs:
14841           Added DocComment, DocCommentHeader, GenerateDocComment() and
14842           OnGenerateDocComment() and some supporting private members for
14843           /doc feature to MemberCore.
14844         * class.cs:
14845           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
14846         * delegate.cs:
14847           Added overriden DocCommentHeader.
14848         * enum.cs:
14849           Added overriden DocCommentHeader and GenerateDocComment().
14850
14851 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
14852
14853         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
14854         unwrapping the enumeration values, chain to
14855         DoConstantNumericPromotions again, so we can promote things to the
14856         fundamental types (takes care of enums that are bytes, sbytes).
14857
14858         Fixes bug #62054.
14859
14860 2004-12-01  Raja R Harinath  <rharinath@novell.com>
14861
14862         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
14863         Fix long-standing bug in type-lookup.  Use FindType instead of
14864         LookupType when ec.ResolvingTypeTree.
14865         (Attribute.ResolveType, Attribute.Resolve)
14866         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
14867         Update to changes.
14868         (Attributes.Search): Remove internal version.  Update.
14869         (Attributes.SearchMulti): Update.
14870         (Attributes.GetClsCompliantAttribute): Remove.
14871         (Attributes.GetIndexerNameAttribute): Remove.
14872         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
14873         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
14874         * class.cs (Indexer.Define): Likewise.
14875
14876 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
14877
14878         Fix bug #68790
14879         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
14880         MarshallByReference members access.
14881
14882         * expression.cs: Use CheckMarshallByRefAccess;
14883         Better error CS0197 message.
14884
14885         * report.cs: Print whole related error message.
14886
14887 2004-11-30  Raja R Harinath  <rharinath@novell.com>
14888
14889         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
14890         the current directory to help debugging.
14891
14892 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
14893
14894         * class (GetClassBases): Better error 60 report.
14895         (EventProperty): Disabled warning 67 detection.
14896
14897 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
14898
14899         Fix bug #60324
14900         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
14901
14902         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
14903         precise values.
14904
14905 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
14906
14907         Fix bug #49488
14908         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
14909
14910         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
14911
14912 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
14913
14914         * attribute.cs (Attribute.Resolve): Refine error reporting and
14915         report a cs0117 if the identifier does not exist, to distinguish
14916         from 0617 which is a miss-use of the actual identifier.
14917
14918         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
14919         between cs0070 and cs0079.
14920
14921         * class.cs (MemberBase.DoDefine): When reporting a wrong
14922         accessibility level, we use MethodCore to compare instead of
14923         Method (this was a regression in some refactoring effort).
14924
14925         So now we correctly report cs0056 again.
14926
14927         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
14928         testing the target_type (which was known to be object_type) and
14929         not the source type (which is anonymous_method).
14930
14931         Fixed reporting of error cs1660.
14932
14933         * expression.cs (UserCast.Source): Expose the underlying cast.
14934
14935         * statement.cs (Switch.SwitchGoverningType): Sort the list of
14936         allowed types to find a match to int32 first (most common).
14937
14938         In addition, it ignores any ImplicitUserConversions that did an
14939         internal implicit conversion (as the switch statement allows only
14940         one integral conversion to exist).
14941
14942         * class.cs (PartialContainer.Create): rename `name' to
14943         `member_name' for clarity.  Then replace the string calls with a
14944         call to MemberName.GetPartialName, as now using
14945         MemberName.ToString is an error (this is due to the side effects
14946         it had, that were fixed in the past).
14947
14948         This will restore the error reporting on a number of partial class
14949         errors that were missusing this (and getting an exception as a
14950         results, which is now just a plain textual warning, because
14951         yyparse debug output would crash otherwise).
14952
14953 2004-11-26  Raja R Harinath  <rharinath@novell.com>
14954
14955         * Makefile (PROGRAM_INSTALL_DIR): Remove.
14956
14957 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
14958
14959         * rootcontext.cs (LookupType): Make sure to cache lookups that
14960         don't give us a negative result. This saves about 5% of corlib
14961         compilation time.
14962
14963 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
14964
14965         * report.cs (AbstractMessage.Print): messages are sent to stderr
14966
14967         * class.cs (TypeContainer.GetClassBases): It is an error to have a
14968         non-interface in the list of interfaces (at this point, either
14969         parent was properly set, or a base class is being listed in the
14970         interfaces section).
14971
14972         This flags error 1722, and resolves the crash from bug 69259.
14973
14974 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
14975
14976         * statement.cs (Using.EmitExpressionFinally): make this work right
14977         for valuetypes. Fixes 69926.
14978
14979 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
14980
14981         * const.cs (Const.ChangeType): Cope with the "0 literal can be
14982         converted to an enum" here, before we try to change the underlying
14983         type.  This code exists, but it is a different code path than the
14984         one used while encoding constants.
14985
14986         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
14987         old bug: when converting from the null literal to a pointer,
14988         return an EmptyCast, not the NullLiteral.
14989
14990         This fixes #69921, the recent null_type changes probably made this
14991         bug more prominent.
14992
14993         (ImplicitReferenceConversionExists): In addition, resynchronized
14994         the code here, so it matches the same code in
14995         ImplicitReferenceConversionExists for the `from any class-type S
14996         to any interface-type T'.
14997         
14998
14999 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
15000
15001         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
15002
15003 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
15004
15005         * cs-parser.jay: Use verbosity accordingly. 
15006
15007 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
15008
15009         * expression.cs (Unary.ResolveOperator): Do not report warning;
15010         AddressOf reads from variable.
15011         
15012         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
15013
15014 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
15015
15016         Fix bug #69462
15017
15018         * attribute.cs (Attributable): Removed CheckTargets.
15019         (Attributes.Emit): Explicit attribute targets are tested here.
15020
15021         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
15022         not enabled for interfaces.
15023
15024         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
15025         (GetAssemblyName): Ouch next bug there.
15026
15027 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
15028
15029         * expression.cs: Error 275 added.
15030         
15031 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
15032
15033         Fix bug #69177 (Implemented decimal constant support)
15034
15035         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
15036         (BinaryFold): Add DecimalConstant.
15037
15038         * const.cs (Define): Decimal constant 
15039         (is not constant.
15040         (ChangeType): Add decimal type handling.
15041         (LookupConstantValue): Don't set value for decimal type but
15042         emit DecimalConstantAttribute. Needed for constant optimization.
15043
15044         * constant.cs (ToDecimal): New method.
15045         (ConvertToDecimal): New method.
15046         (IntConstant): Implemented ConvertToDecimal.
15047         (DecimalConstant.Emit): Emit optimized version for decimals in
15048         int range.
15049
15050         * expression.cs (ResolveOperator): Changed order of constant
15051         reduction to work correctly with native types which have
15052         overloaded operators.
15053         (ResolveMemberAccess): Extract constant value from attribute
15054         for decimal type.
15055
15056         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
15057
15058         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
15059         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
15060         (ChangeType): Decimal is special.
15061         (TypeToCoreType): Add decimal type.
15062
15063 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
15064
15065         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
15066         decimal types.
15067
15068 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
15069
15070         * class.cs (EventField.ApplyAttributeBuilder): Fix error
15071         test cs1667-5.cs.
15072
15073 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
15074
15075         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
15076
15077         * pending.cs (PendingImplementation): Grab only interfaces.
15078
15079 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
15080
15081         * statement.cs (ForeachHelperMethods): Add location member and
15082         error 202 detection.
15083
15084 2004-11-19  Raja R Harinath  <rharinath@novell.com>
15085
15086         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
15087         automatically handled by executable.make.
15088         (PROGRAM): Make profile-specific.
15089
15090 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
15091
15092         * expression.cs (DoResolveBase): Fixed wrong warning for out
15093         variables.
15094
15095 2004-11-18  Martin Baulig  <martin@ximian.com>
15096
15097         Merged latest changes into gmcs.  Please keep this comment in
15098         here, it makes it easier for me to see what changed in MCS since
15099         the last time I merged.
15100
15101 2004-11-17  Raja R Harinath  <rharinath@novell.com>
15102
15103         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
15104         (TypeHandle.GetMemberCache): New.
15105         (TypeHandle.TypeHandle): Update.
15106         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
15107         (TypeManager.LookupParentInterfacesCache):
15108         Rename from LookupInterfaceCache.  Optimize slightly.
15109         (TypeManager.MemberLookup_FindMembers): Update.
15110         * decl.cs (MemberCache.MemberCache): Set Container to null in the
15111         multi-type variant.
15112         (AddCacheContents): Rename from AddHashtable.
15113         * class.cs (TypeContainer.parent_container): Remove.
15114         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
15115         (TypeContainer.DoDefineMembers): Don't initialize it.
15116         Update to name changes.
15117         
15118 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
15119
15120         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
15121         that factors the code to check access modifiers on override.  
15122
15123         (PropertyBase): Use the code here.
15124
15125         Patch from Lluis S'anchez, fixes bug #69361.
15126
15127 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
15128
15129         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
15130         routine that is used to report the use of a captured variable
15131         whose address has been taken.
15132
15133         There are two checks: one when variables are being captured and
15134         the other check is when the address of a variable is taken. 
15135         
15136         (because an anonymous methods might be resolved before *or* after
15137         the address has been taken) and 
15138
15139         * expression.cs (Conditional.DoResolve): Remove the special
15140         casing that Martin added to trueExpr and falseExpr being both
15141         NullLiteral.  We get the right behavior now just by introducing
15142         the null_type into the compiler. 
15143
15144         * convert.cs (ExplicitConversion): Change the code to use
15145         null_type instead of testing `expr is NullLiteral'.
15146         (ImplicitConversionStandard): use null_type too.
15147         (ImplicitReferenceConversionExists): use null_type too.
15148         (ImplicitReferenceConversion): use null_type too.
15149
15150         * literal.cs: The type of `NullLiteral' is now null_type instead
15151         of object_type. 
15152         (Resolve): Set the type here.
15153
15154         * typemanager.cs: Introduce null_type.
15155
15156 2004-11-17  Martin Baulig  <martin@ximian.com>
15157
15158         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
15159         direction, like FindMembers() does.  Fixes #69546, testcase is in
15160         test-315.cs.    
15161
15162 2004-11-16  Martin Baulig  <martin@ximian.com>
15163
15164         This is based on a patch from Marek Safar, see bug #69082.
15165         Fixes bugs #63705 and #67130.
15166
15167         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
15168         method; create a MemberCache for an interface type and cache the
15169         result.
15170
15171         * decl.cs (IMemberContainer.ParentContainer): Removed.
15172         (IMemberContainer.ParentCache): New property.
15173         (MemberCache.SetupCacheForInterface): Removed.
15174         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
15175         to create a cache for an interface's "parent".
15176
15177         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
15178         interfaces too.
15179
15180 2004-11-16  Martin Baulig  <martin@ximian.com>
15181
15182         Merged back from gmcs; these changes already went into gmcs a
15183         couple of weeks ago.
15184
15185         * typemanager.cs
15186         (TypeManager.AddUserType): Removed the `ifaces' argument.
15187         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
15188         `TypeExpr []'.
15189         (TypeManager.AddUserInterface): Removed.
15190         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
15191         `TypeExpr []'.
15192         (TypeManager.GetInterfaces): Likewise.
15193         (TypeManager.GetExplicitInterfaces): Likewise.
15194
15195         * ecore.cs (TypeExpr.GetInterfaces): Removed.
15196
15197         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
15198         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
15199
15200 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
15201
15202         * statement.cs: Avoid adding bools to a hashtable.
15203
15204 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
15205
15206         * expression.cs (Invocation.OverloadResolve): Flag error if we are
15207         calling an unsafe method from a safe location.
15208
15209 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
15210
15211         Fix #69167
15212         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
15213
15214 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
15215
15216         * namespace.cs (VerifyUsing): use GetPartialName instead of
15217         ToString. 
15218
15219 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
15220
15221         * statement.cs (Return.Resolve): Fix regression in typo: if
15222         `in_exc', we have to request a NeedReturnLabel, this was a typo
15223         introduced in the anonymous method check-in.  Fixes #69131.
15224
15225         * Indexers were using the ShortName when defining themselves,
15226         causing a regression in the compiler bootstrap when applying the
15227         patch from 2004-11-02 (first part), now they use their full name
15228         and the bug is gone.
15229
15230 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
15231
15232         * driver.cs: Strip the path from the names of embedded resources. Fixes
15233         #68519.
15234
15235 2004-11-04  Raja R Harinath  <rharinath@novell.com>
15236
15237         Fix error message regression: cs0104-2.cs.
15238         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
15239         (AliasEntry.Resolve): Update.
15240         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
15241         'silent' flag.
15242         (RootContext.LookupType): Update.
15243
15244 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
15245
15246         * cs-parser.jay: Add support for handling accessor modifiers
15247         * class: Add support port accessor modifiers and error checking,
15248         define PropertyMethod.Define as virtual (not abstract anymore)
15249         * ecore.cs: Add checking for proeprties access with access modifiers
15250         * iterators.cs: Modify Accessor constructor call based in the modified
15251         constructor
15252 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
15253
15254         * expression.cs (StringConcat): Handle being called twice,
15255         as when we have a concat in a field init with more than two
15256         ctors in the class
15257
15258 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
15259
15260         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
15261         special case explicit implementations, we should always produce
15262         the .property or .event declaration.
15263         
15264         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
15265         since it will not return correct data if people use this
15266         unresolved in the presence of using statements (see test-313).
15267
15268         * class.cs (MethodData.Define): If we are an explicit interface
15269         implementation, set the method name to the full name of the
15270         interface plus the name of the method.  
15271
15272         Notice that using the method.MethodName.GetFullName() does not
15273         work, as it will only contain the name as declared on the source
15274         file (it can be a shorthand in the presence of using statements)
15275         and not the fully qualifed type name, for example:
15276
15277         using System;
15278
15279         class D : ICloneable {
15280                 object ICloneable.Clone ()  {
15281                 }
15282         }
15283
15284         Would produce a method called `ICloneable.Clone' instead of
15285         `System.ICloneable.Clone'.
15286
15287         * namespace.cs (Alias.Resolve): Use GetPartialName.
15288         
15289 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
15290
15291         * cs-parser.jay: Add error 1055 report.
15292
15293 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
15294
15295         * assign.cs (Assign.DoResolve): Only do the transform of
15296         assignment into a New if the types are compatible, if not, fall
15297         through and let the implicit code deal with the errors and with
15298         the necessary conversions. 
15299
15300 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
15301
15302         * cs-parser.jay: Add error 1031 report.
15303
15304         * cs-tokenizer.cs: Add location for error 1038.
15305
15306 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15307
15308         * cs-parser.jay: Add error 1016 report.
15309
15310 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15311
15312         * cs-parser.jay: Add errors 1575,1611 report.
15313
15314 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15315
15316         * cs-parser.jay: Add error 1001 report.
15317
15318 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15319
15320         Fix #68850
15321         * attribute.cs (GetMarshal): Add method argument for
15322         caller identification.
15323
15324         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
15325         agument for GetMarshal and RuntimeMissingSupport.
15326
15327 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15328
15329         * attribute.cs (ExtractSecurityPermissionSet): Removed
15330         TypeManager.code_access_permission_type.
15331
15332         * typemanager.cs: Removed TypeManager.code_access_permission_type.
15333
15334 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
15335
15336         * expression.cs (LocalVariableReference.DoResolveLValue): Check
15337         for obsolete use of a variable here.   Fixes regression on errors
15338         cs0619-25 and cs0619-26.
15339
15340 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
15341
15342         Fix #62358, implemented security attribute encoding.
15343
15344         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
15345         Tests permitted SecurityAction for assembly or other types.
15346         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
15347         data from SecurityPermissionAttribute to PermisionSet class.
15348
15349         * class.cs (ApplyAttributeBuilder): Added special handling
15350         for System.Security.Permissions.SecurityAttribute based types.
15351
15352         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
15353         special handling for System.Security.Permissions.SecurityAttribute
15354         based types.
15355
15356         * enum.cs (ApplyAttributeBuilder): Added special handling
15357         for System.Security.Permissions.SecurityAttribute based types.
15358
15359         * parameter.cs (ApplyAttributeBuilder): Added special handling
15360         for System.Security.Permissions.SecurityAttribute based types.
15361
15362         * rootcontext.cs: Next 2 core types.
15363
15364         * typemanager.cs (TypeManager.security_permission_attr_type):
15365         Built in type for the SecurityPermission Attribute.
15366         (code_access_permission_type): Build in type.
15367
15368 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
15369
15370         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
15371         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
15372         all of this information into
15373         EmitContext.EmitCapturedVariableInstance.
15374         
15375         * codegen.cs (EmitCapturedVariableInstance): move here the
15376         funcionality of emitting an ldarg.0 in the presence of a
15377         remapping.   This centralizes the instance emit code.
15378
15379         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
15380         then emit a load of this: it means that we have reached the
15381         topmost ScopeInfo: the one that contains the pointer to the
15382         instance of the class hosting the anonymous method.
15383
15384         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
15385         captures to the topmost CaptureContext.
15386
15387 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
15388
15389         * expression.cs (LocalVariableReference): Move the knowledge about
15390         the iterators into codegen's EmitCapturedVariableInstance.
15391
15392 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
15393
15394         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
15395         all code paths return a value from an anonymous method (it is the
15396         same as the 161 error, but for anonymous methods).
15397
15398 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
15399
15400         The introduction of anonymous methods in the compiler changed
15401         various ways of doing things in the compiler.  The most
15402         significant one is the hard split between the resolution phase
15403         and the emission phases of the compiler.
15404
15405         For instance, routines that referenced local variables no
15406         longer can safely create temporary variables during the
15407         resolution phase: they must do so from the emission phase,
15408         since the variable might have been "captured", hence access to
15409         it can not be done with the local-variable operations from the runtime.
15410         
15411         * statement.cs 
15412
15413         (Block.Flags): New flag `IsTopLevel' to indicate that this block
15414         is a toplevel block.
15415
15416         (ToplevelBlock): A new kind of Block, these are the blocks that
15417         are created by the parser for all toplevel method bodies.  These
15418         include methods, accessors and anonymous methods.
15419
15420         These contain some extra information not found in regular blocks:
15421         A pointer to an optional CaptureContext (for tracking captured
15422         local variables and parameters).  A pointer to the parent
15423         ToplevelBlock.
15424         
15425         (Return.Resolve): Catch missmatches when returning a value from an
15426         anonymous method (error 1662).
15427         Invoke NeedReturnLabel from the Resolve phase instead of the emit
15428         phase.
15429
15430         (Break.Resolve): ditto.
15431
15432         (SwitchLabel): instead of defining the labels during the
15433         resolution phase, we now turned the public ILLabel and ILLabelCode
15434         labels into methods called GetILLabelCode() and GetILLabel() that
15435         only define the label during the Emit phase.
15436
15437         (GotoCase): Track the SwitchLabel instead of the computed label
15438         (its contained therein).  Emit the code by using
15439         SwitchLabel.GetILLabelCode ().
15440
15441         (LocalInfo.Flags.Captured): A new flag has been introduce to track
15442         whether the Local has been captured or not.
15443
15444         (LocalInfo.IsCaptured): New property, used to tell whether the
15445         local has been captured.
15446         
15447         * anonymous.cs: Vastly updated to contain the anonymous method
15448         support.
15449
15450         The main classes here are: CaptureContext which tracks any
15451         captured information for a toplevel block and ScopeInfo used to
15452         track the activation frames for various local variables.   
15453
15454         Each toplevel block has an optional capture context associated
15455         with it.  When a method contains an anonymous method both the
15456         toplevel method and the anonymous method will create a capture
15457         context.   When variables or parameters are captured, they are
15458         recorded on the CaptureContext that owns them, for example:
15459
15460         void Demo () {
15461              int a;
15462              MyDelegate d = delegate {
15463                  a = 1;
15464              }
15465         }
15466
15467         Here `a' will be recorded as captured on the toplevel
15468         CapturedContext, the inner captured context will not have anything
15469         (it will only have data if local variables or parameters from it
15470         are captured in a nested anonymous method.
15471
15472         The ScopeInfo is used to track the activation frames for local
15473         variables, for example:
15474
15475         for (int i = 0; i < 10; i++)
15476                 for (int j = 0; j < 10; j++){
15477                    MyDelegate d = delegate {
15478                         call (i, j);
15479                    }
15480                 }
15481
15482         At runtime this captures a single captured variable `i', but it
15483         captures 10 different versions of the variable `j'.  The variable
15484         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
15485         recorded on a child.  
15486
15487         The toplevel ScopeInfo will also track information like the `this'
15488         pointer if instance variables were referenced (this is necessary
15489         as the anonymous method lives inside a nested class in the host
15490         type of the method). 
15491
15492         (AnonymousMethod): Expanded to track the Toplevel, implement
15493         `AnonymousMethod.Compatible' to tell whether an anonymous method
15494         can be converted to a target delegate type. 
15495
15496         The routine now also produces the anonymous method content
15497
15498         (AnonymousDelegate): A helper class that derives from
15499         DelegateCreation, this is used to generate the code necessary to
15500         produce the delegate for the anonymous method that was created. 
15501
15502         * assign.cs: API adjustments for new changes in
15503         Convert.ImplicitStandardConversionExists.
15504
15505         * class.cs: Adjustments to cope with the fact that now toplevel
15506         blocks are of type `ToplevelBlock'. 
15507
15508         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
15509         insteda of standard blocks.
15510
15511         Flag errors if params arguments are passed to anonymous methods.
15512
15513         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
15514         `CurrentAnonymousMethod' which points to the current Anonymous
15515         Method.  The variable points to the AnonymousMethod class that
15516         holds the code being compiled.  It is set in the new EmitContext
15517         created for the anonymous method.
15518
15519         (EmitContext.Phase): Introduce a variable and an enumeration to
15520         assist in enforcing some rules about when and where we are allowed
15521         to invoke certain methods (EmitContext.NeedsReturnLabel is the
15522         only one that enfonces this right now).
15523
15524         (EmitContext.HaveCaptureInfo): new helper method that returns
15525         whether we have a CapturedContext initialized.
15526
15527         (EmitContext.CaptureVariable): New method used to register that a
15528         LocalInfo must be flagged for capturing. 
15529
15530         (EmitContext.CapturedParameter): New method used to register that a
15531         parameters must be flagged for capturing. 
15532         
15533         (EmitContext.CapturedField): New method used to register that a
15534         field must be flagged for capturing. 
15535
15536         (EmitContext.HaveCapturedVariables,
15537         EmitContext.HaveCapturedFields): Return whether there are captured
15538         variables or fields. 
15539
15540         (EmitContext.EmitMethodHostInstance): This is used to emit the
15541         instance for the anonymous method.  The instance might be null
15542         (static methods), this (for anonymous methods that capture nothing
15543         and happen to live side-by-side with the current method body) or a
15544         more complicated expression if the method has a CaptureContext.
15545
15546         (EmitContext.EmitTopBlock): Routine that drives the emission of
15547         code: it will first resolve the top block, then emit any metadata
15548         and then emit the code.  The split is done so that we can extract
15549         any anonymous methods and flag any captured variables/parameters.
15550         
15551         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
15552         during this phase, the ILGenerator should not be used as labels
15553         and local variables declared here might not be accessible to any
15554         code that is part of an anonymous method.  
15555
15556         Exceptions to this include the temporary variables that are
15557         created by some statements internally for holding temporary
15558         variables. 
15559         
15560         (EmitContext.EmitMeta): New routine, in charge of emitting all the
15561         metadata for a cb
15562
15563         (EmitContext.TemporaryReturn): This method is typically called
15564         from the Emit phase, and its the only place where we allow the
15565         ReturnLabel to be defined other than the EmitMeta.  The reason is
15566         that otherwise we would have to duplicate a lot of logic in the
15567         Resolve phases of various methods that today is on the Emit
15568         phase. 
15569
15570         (EmitContext.NeedReturnLabel): This no longer creates the label,
15571         as the ILGenerator is not valid during the resolve phase.
15572
15573         (EmitContext.EmitThis): Extended the knowledge in this class to
15574         work in anonymous methods in addition to iterators. 
15575
15576         (EmitContext.EmitCapturedVariableInstance): This emits whatever
15577         code is necessary on the stack to access the instance to a local
15578         variable (the variable will be accessed as a field).
15579
15580         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
15581         EmitContext.EmitAddressOfParameter): Routines to support
15582         parameters (not completed at this point). 
15583         
15584         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
15585         will also remove the parameters.
15586
15587         * convert.cs (Convert): Define a `ConstantEC' which points to a
15588         null.  This is just to prefity some code that uses
15589         ImplicitStandardConversion code and do not have an EmitContext
15590         handy.
15591
15592         The idea is to flag explicitly that at that point in time, it is
15593         known that the conversion will not trigger the delegate checking
15594         code in implicit conversions (which requires a valid
15595         EmitContext). 
15596
15597         Everywhere: pass new EmitContext parameter since
15598         ImplicitStandardConversionExists now requires it to check for
15599         anonymous method conversions. 
15600
15601         (Convert.ImplicitStandardConversionExists): If the type of an
15602         expression is the anonymous_method_type, and the type is a
15603         delegate, we invoke the AnonymousMethod.Compatible method to check
15604         whether an implicit conversion is possible. 
15605
15606         (Convert.ImplicitConversionStandard): Only do implicit method
15607         group conversions if the language level is not ISO_1.
15608
15609         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
15610         MethodInfo for the Invoke method.  used by Delegate and
15611         AnonymousDelegate.
15612
15613         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
15614         method conversions if the target type is a delegate.
15615
15616         Removed extra debugging nops.
15617
15618         (LocalVariableReference): Turn the `local_info' into a public
15619         field. 
15620
15621         Add `prepared' field, the same hack used for FieldExprs to cope
15622         with composed assignments, as Local variables do not necessarily
15623         operate purely on the stack as they used to: they can be captured
15624         fields. 
15625
15626         Add `temp' for a temporary result, like fields.
15627
15628         Refactor DoResolve and DoResolveLValue into DoResolveBase.
15629
15630         It now copes with Local variables that are captured and emits the
15631         proper instance variable to load it from a field in the captured
15632         case. 
15633
15634         (ParameterReference.DoResolveBase): During the resolve phase,
15635         capture parameters if we are in an anonymous method.
15636
15637         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
15638         anonymous method, use the EmitContext helper routines to emit the
15639         parameter reference.
15640
15641         * iterators.cs: Set RemapToProxy to true/false during the
15642         EmitDispose class.
15643
15644         * parameters.cs (GetParameterByName): New helper method. 
15645
15646         * typemanager.cs (anonymous_method_type) a new type that
15647         represents an anonyous method.  This is always an internal type,
15648         used as a fencepost to test against the anonymous-methodness of an
15649         expression. 
15650         
15651 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
15652
15653         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
15654         561 report.
15655         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
15656
15657 2004-10-18  Martin Baulig  <martin@ximian.com>
15658
15659         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
15660         `Type' directly, but call ResolveType() on it.
15661         (Catch.Resolve): Likewise.
15662         (Foreach.Resolve): Likewise.
15663
15664 2004-10-18  Martin Baulig  <martin@ximian.com>
15665
15666         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
15667         `Type' directly, but call ResolveType() on it.
15668         (Probe.DoResolve): Likewise.
15669         (ArrayCreation.LookupType): Likewise.
15670         (TypeOf.DoResolve): Likewise.
15671         (SizeOf.DoResolve): Likewise.
15672
15673 2004-10-18  Martin Baulig  <martin@ximian.com>
15674
15675         * expression.cs (Invocation.BetterFunction): Put back
15676         TypeManager.TypeToCoreType().
15677
15678 2004-10-18  Raja R Harinath  <rharinath@novell.com>
15679
15680         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
15681         the ResolveType.
15682
15683 2004-10-18  Martin Baulig  <martin@ximian.com>
15684
15685         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
15686         `Type' directly, but call ResolveType() on it.
15687
15688 2004-10-18  Martin Baulig  <martin@ximian.com>
15689
15690         * class.cs (FieldMember.Define): Don't access the TypeExpr's
15691         `Type' directly, but call ResolveType() on it.
15692         (MemberBase.DoDefine): Likewise.
15693
15694         * expression.cs (New.DoResolve): Don't access the TypeExpr's
15695         `Type' directly, but call ResolveType() on it.
15696         (ComposedCast.DoResolveAsTypeStep): Likewise.
15697
15698         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
15699         `Type' directly, but call ResolveType() on it.
15700
15701 2004-10-17  John Luke  <john.luke@gmail.com>
15702
15703         * class.cs (Operator.GetSignatureForError): use CSharpName
15704
15705         * parameter.cs (Parameter.GetSignatureForError): Returns
15706         correct name even if was not defined.
15707
15708 2004-10-13  Raja R Harinath  <rharinath@novell.com>
15709
15710         Fix #65816.
15711         * class.cs (TypeContainer.EmitContext): New property.
15712         (DefineNestedTypes): Create an emitcontext for each part.
15713         (MethodCore.DoDefineParameters): Use container's emitcontext.
15714         Pass type array to InternalParameters.
15715         (MemberBase.DoDefine): Use container's emitcontext.
15716         (FieldMember.Define): Likewise.
15717         (Event.Define): Likewise.
15718         (SetMethod.GetParameterInfo): Change argument to EmitContext.
15719         Pass type array to InternalParameters.
15720         (SetIndexerMethod.GetParameterInfo): Likewise.
15721         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
15722         * delegate.cs (Define): Pass emitcontext to
15723         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
15724         array to InternalParameters.
15725         * expression.cs (ParameterReference.DoResolveBase): Pass
15726         emitcontext to GetParameterInfo.
15727         (ComposedCast.DoResolveAsTypeStep): Remove check on
15728         ec.ResolvingTypeTree.
15729         * parameter.cs (Parameter.Resolve): Change argument to
15730         EmitContext.  Use ResolveAsTypeTerminal.
15731         (Parameter.GetSignature): Change argument to EmitContext.
15732         (Parameters.ComputeSignature): Likewise.
15733         (Parameters.ComputeParameterTypes): Likewise.
15734         (Parameters.GetParameterInfo): Likewise.
15735         (Parameters.ComputeAndDefineParameterTypes): Likewise.
15736         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
15737         * support.cs (InternalParameters..ctor): Remove variant that takes
15738         a DeclSpace.
15739         * typemanager.cs (system_intptr_expr): New.
15740         (InitExpressionTypes): Initialize it.
15741
15742 2004-10-12  Chris Toshok  <toshok@ximian.com>
15743
15744         * cs-parser.jay: fix location for try_statement and catch_clause.
15745
15746 2004-10-11  Martin Baulig  <martin@ximian.com>
15747
15748         * report.cs: Don't make --fatal abort on warnings, we have
15749         -warnaserror for that.
15750
15751 2004-10-07  Raja R Harinath  <rharinath@novell.com>
15752
15753         More DeclSpace.ResolveType avoidance.
15754         * decl.cs (MemberCore.InUnsafe): New property.
15755         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
15756         with newly created EmitContext.
15757         (FieldMember.Define): Likewise.
15758         * delegate.cs (Delegate.Define): Likewise.
15759         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
15760         only if normal name-lookup fails.
15761         (TypeExpr.DoResolve): Enable error-checking.
15762         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
15763         (SizeOf.DoResolve): Likewise.
15764         (ComposedCast.DoResolveAsTypeStep): Likewise.
15765         (StackAlloc.DoResolve): Likewise.
15766         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
15767         (Block.Unsafe): New property.
15768         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
15769         (Unsafe): Set 'unsafe' flag of contained block.
15770         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
15771         (Fixed.Resolve): Likewise.
15772         (Catch.Resolve): Likewise.
15773         (Using.ResolveLocalVariableDecls): Likewise.
15774         (Foreach.Resolve): Likewise.
15775
15776 2004-10-05  John Luke <john.luke@gmail.com>
15777
15778         * cs-parser.jay: add location to error CS0175
15779
15780 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
15781
15782         * ecore.cs (Expression.Constantity): Add support for turning null
15783         into a constant.
15784
15785         * const.cs (Const.Define): Allow constants to be reference types
15786         as long as the value is Null.
15787
15788 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
15789
15790         * namespace.cs (NamespaceEntry.Using): No matter which warning
15791         level is set, check if this namespace name has already been added.
15792
15793 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
15794
15795         * expression.cs: reftype [!=]= null should always use br[true,false].
15796         # 67410
15797
15798 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
15799
15800         Fix #67108
15801         * attribute.cs: Enum conversion moved to 
15802         GetAttributeArgumentExpression to be applied to the all
15803         expressions.
15804
15805 2004-10-01  Raja R Harinath  <rharinath@novell.com>
15806
15807         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
15808         * class.c (TypeContainer.DefineType): Flag error if
15809         base types aren't accessible due to access permissions.
15810         * decl.cs (DeclSpace.ResolveType): Move logic to
15811         Expression.ResolveAsTypeTerminal.
15812         (DeclSpace.ResolveTypeExpr): Thin layer over
15813         Expression.ResolveAsTypeTerminal.
15814         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
15815         Refactor code into NestedAccess.  Use it.
15816         (DeclSpace.NestedAccess): New.
15817         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
15818         argument to silence errors.  Check access permissions.
15819         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
15820         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
15821         (Cast.DoResolve): Likewise.
15822         (New.DoResolve): Likewise.
15823         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
15824         (TypeOf.DoResolve): Likewise.
15825
15826         * expression.cs (Invocation.BetterConversion): Return the Type of
15827         the better conversion.  Implement section 14.4.2.3 more faithfully.
15828         (Invocation.BetterFunction): Make boolean.  Make correspondence to
15829         section 14.4.2.2 explicit.
15830         (Invocation.OverloadResolve): Update.
15831         (Invocation): Remove is_base field.
15832         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
15833         (Invocation.Emit): Likewise.
15834
15835 2004-09-27  Raja R Harinath  <rharinath@novell.com>
15836
15837         * README: Update to changes.
15838
15839 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
15840
15841         * cs-parser.jay: Reverted 642 warning fix.
15842
15843 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
15844
15845         Fix bug #66615
15846         * decl.cs (FindMemberWithSameName): Indexer can have more than
15847         1 argument.
15848
15849 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
15850
15851         * expression.cs (LocalVariableReference.DoResolveLValue):
15852         Do not report warning 219 for out values.
15853         (EmptyExpression.Null): New member to avoid extra allocations.
15854
15855 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
15856
15857         * cs-parser.jay: Fix wrong warning 642 report.
15858
15859         * cs-tokenizer.cs (CheckNextToken): New helper;
15860         Inspect next character if is same as expected.
15861
15862 2004-09-23  Martin Baulig  <martin@ximian.com>
15863
15864         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
15865         (Convert.ImplicitReferenceConversionExists): Likewise.
15866
15867 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
15868
15869         * class.cs (Operator.Define): Add error 448 and 559 report.
15870
15871 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
15872
15873         * class.cs (MemberBase.IsTypePermitted): New protected
15874         method for checking error CS0610.
15875
15876 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
15877
15878         * class.cs (TypeContainer.HasExplicitLayout): New property
15879         Returns whether container has StructLayout attribute set Explicit.
15880         (FieldMember): New abstract class for consts and fields.
15881         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
15882         (Field): Reuse FieldMember.
15883
15884         * const.cs (Const): Reuse FieldMember.
15885
15886         * rootcontext.cs: EmitConstants call moved to class.
15887
15888 2004-09-22  Martin Baulig  <martin@ximian.com>
15889
15890         Thanks to Peter Sestoft for this bug report.
15891
15892         * expression.cs (Conditional): If both the `trueExpr' and the
15893         `falseExpr' is a NullLiteral, return a NullLiteral.
15894
15895 2004-09-22  Martin Baulig  <martin@ximian.com>
15896
15897         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
15898         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
15899         for the "get_Current" call.
15900
15901 2004-09-22  Martin Baulig  <martin@ximian.com>
15902
15903         Marek and me just fixed one of our oldest bugs: #28562 :-)
15904
15905         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
15906
15907         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
15908         we're an EnumConstant, just return that.
15909         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
15910         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
15911         to get the value which'll actually be written into the attribute.
15912         However, we have to use GetValue() to access the attribute's value
15913         in the compiler.        
15914
15915 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
15916
15917         * constant.cs (Constant.IsNegative): New abstract property
15918         IsNegative.
15919
15920         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
15921         (StackAlloc.DoResolve): Reused IsNegative.
15922
15923 2004-09-21  Martin Baulig  <martin@ximian.com>
15924
15925         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
15926         if we're used in an iterator, we may be called from different
15927         methods.
15928
15929         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
15930         we actually have an exception block.
15931
15932 2004-09-20  John Luke <jluke@cfl.rr.com>
15933
15934         * class.cs, cs-parser.jay: Improve the error report for 1520:
15935         report the actual line where the error happens, not where the
15936         class was declared.
15937
15938         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
15939         Pass location information that was available elsewhere.
15940
15941 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
15942
15943         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
15944         runtime to delay sign assemblies.
15945
15946 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
15947
15948         * cs-parser.jay: Do not report the stack trace, this is barely
15949         used nowadays.
15950
15951 2004-08-22  John Luke  <john.luke@gmail.com>
15952  
15953         * driver.cs : check that a resource id is not already used
15954         before adding it, report CS1508 if it is, bug #63637
15955
15956 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
15957
15958         * ecore.cs: Removed dead code.
15959
15960 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
15961
15962         * class.cs: Do not report warning CS0067 on the interfaces.
15963
15964 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
15965
15966         * cs-parser.jay: Add error 504 report.
15967
15968 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
15969
15970         * rootcontext.cs: WarningLevel is 4 by default now.
15971
15972         * statement.cs (Fixed.Resolve): Do not null
15973         VariableInfo.
15974
15975 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
15976
15977         Fixed bug #55780
15978         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
15979         deep search when property is not virtual.
15980         (PropertyExpr.ResolveAccessors): Make one call for both
15981         accessors.
15982
15983 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
15984
15985         Fixed bug #65766
15986         * statement.cs: Error 152 report constains also location.
15987
15988 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
15989
15990         Fixed bug #65766
15991         * const.cs: Explicitly set constant as static.
15992
15993 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
15994
15995         Fixed bug #64226
15996         * cs-parser.jay: Add error 1017 report.
15997
15998 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
15999
16000         Fixed bug #59980, #64224
16001         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
16002
16003         * typemanager.cs (IsSpecialMethod): Simplified
16004
16005 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
16006
16007         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
16008         condition with better params.
16009
16010 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
16011
16012         Fixed bug #65238
16013         * attribute.cs (Resolve): Property has to have both
16014         accessors.
16015
16016 2004-09-14  Martin Baulig  <martin@ximian.com>
16017
16018         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
16019
16020 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
16021
16022         Fixed bug #61902
16023         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
16024         called and is obsolete then this member suppress message
16025         when call is inside next [Obsolete] method or type.
16026
16027         * expression.cs: Use TestObsoleteMethodUsage member.
16028
16029 2004-09-14  Martin Baulig  <martin@ximian.com>
16030
16031         * cs-parser.jay: Sync a bit with the GMCS version.
16032
16033 2004-09-14  Martin Baulig  <martin@ximian.com>
16034
16035         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
16036         (CSharpParser.yacc_verbose_flag): New public field.
16037
16038         * genericparser.cs: Removed.
16039
16040 2004-09-14  Raja R Harinath  <rharinath@novell.com>
16041
16042         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
16043
16044 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
16045
16046         * class.cs (MethodCore.CheckBase): Fix bug #65757.
16047
16048 2004-09-10  Martin Baulig  <martin@ximian.com>
16049
16050         Backported my MemberName changes from GMCS into MCS.
16051
16052         - we are now using a special `MemberName' class instead of using
16053         strings; in GMCS, the `MemberName' also contains the type
16054         arguments.
16055
16056         - changed the grammar rules a bit:
16057           * the old `member_name' is now a `namespace_or_type_name':
16058             The rule is that we use `namespace_or_type_name' everywhere
16059             where we expect either a "member name" (GetEnumerator) or a
16060             "member name" with an explicit interface name
16061             (IEnumerable.GetEnumerator).
16062             In GMCS, the explicit interface name may include type arguments
16063             (IEnumerable<T>.GetEnumerator).
16064           * we use `member_name' instead of just `IDENTIFIER' for
16065             "member names":
16066             The rule is that we use `member_name' wherever a member may
16067             have type parameters in GMCS.       
16068
16069         * decl.cs (MemberName): New public class.
16070         (MemberCore.MemberName): New public readonly field.
16071         (MemberCore.ctor): Take a `MemberName' argument, not a string.
16072         (DeclSpace): Likewise.
16073
16074         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
16075         * enum.cs (Enum.ctor): Likewise.
16076
16077         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
16078         MemberName.     
16079         (AliasEntry.ctor): Take a MemberName, not an Expression.
16080         (AliasEntry.UsingAlias): Likewise.
16081
16082         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
16083         (IMethodData.MemberName): Changed type from string to MemberName.
16084         (MemberBase.ExplicitInterfaceName): Likewise.
16085         (AbstractPropertyEventMethod.SetupName): Make this private.
16086         (AbstractPropertyEventMethod.ctor): Added `string prefix'
16087         argument; compute the member name here.
16088         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
16089         on the `member.MemberName' and the `prefix'.
16090
16091         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
16092         not `type_name'.
16093         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
16094         thus, we get a `MemberName' instead of a `string'.  These
16095         declarations may have type parameters in GMCS.
16096         (interface_method_declaration, delegate_declaration): Likewise.
16097         (class_declaration, interface_declaration): Likewise.
16098         (method_header): Use `namespace_or_type_name' instead of
16099         `member_name'.  We may be an explicit interface implementation.
16100         (property_declaration, event_declaration): Likewise.
16101         (member_name): This is now just an `IDENTIFIER', not a
16102         `namespace_or_type_name'.
16103         (type_name, interface_type): Removed.
16104         (namespace_or_type_name): Return a MemberName, not an Expression.
16105         (primary_expression): Use `member_name' instead of `IDENTIFIER';
16106         call GetTypeExpression() on the MemberName to get an expression.
16107         (IndexerDeclaration.interface_type): Changed type from string to
16108         MemberName.
16109         (MakeName): Operate on MemberName's instead of string's.
16110
16111 2004-09-13  Raja R Harinath  <rharinath@novell.com>
16112
16113         Fix bug #55770.
16114         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
16115         (NamespaceEntry.Lookup): Add new argument to flag if we want the
16116         lookup to avoid symbols introduced by 'using'.
16117         * rootcontext.cs (NamespaceLookup): Update.
16118
16119 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
16120
16121         * class.cs (TypeContainer.DoDefineMembers): Do not call
16122         DefineDefaultConstructor for static classes.
16123
16124 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
16125
16126         * attribute.cs (Attribute.Resolve): Add error 653 report.
16127
16128         * class.cs (Class.ApplyAttributeBuilder): Add error 641
16129         report.
16130         (Method.ApplyAttributeBuilder): Add error 685 report.
16131         (Operator.Define): Add error 564 report.
16132
16133         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
16134
16135         * expression.cs (Invocation.DoResolve): Add error
16136         245 and 250 report.
16137
16138         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
16139         error 674 report.
16140
16141 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16142
16143         * class.cs (ConstructorInitializer.Resolve):
16144         Wrong error number (515->516).
16145
16146 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16147
16148         * class.cs (Indexer.Define): Add error 631 report.
16149
16150 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16151
16152         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
16153
16154 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16155
16156         * expression.cs (Probe.DoResolve): Add error CS0241 report.
16157
16158 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
16159
16160         * cs-parser.jay: Added error CS0241 report.
16161
16162 2004-09-10  Raja R Harinath  <rharinath@novell.com>
16163
16164         * cs-parser.jay (fixed_statement): Introduce a scope for the
16165         declaration in the 'fixed' statement.
16166
16167 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16168
16169         * cs-parser.jay: Added CS0230 error report.
16170
16171 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16172
16173         * cs-parser.jay: Added errors CS0231 and CS0257 report.
16174
16175 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16176
16177         * expression.cs (Argument.Resolve): Added error CS0192 and
16178         CS0199 report.
16179
16180 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16181
16182         C# 2.0 #pragma warning feature
16183
16184         * cs-tokenizer.cs (PreProcessPragma): New method; 
16185         Handles #pragma directive.
16186
16187         * report.cs (WarningRegions): New class; Support
16188         class for #pragma warning directive. It tests whether
16189         warning is enabled for a given line.
16190
16191 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
16192
16193         * const.cs: Add more descriptive error report, tahnks to
16194         Sebastien. 
16195
16196 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
16197
16198         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
16199
16200 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
16201
16202         * expression.cs: Apply patch from Ben: Remove dead code from
16203         ArrayCreation, and remove the TurnintoConstant call in const.cs,
16204         as that code just threw an exception anwyays.
16205
16206         * const.cs: Remove the call to the turnintoconstant, for details
16207         see bug: #63144
16208         
16209         * literal.cs: The type of the null-literal is the null type;  So
16210         we use a placeholder type (literal.cs:System.Null, defined here)
16211         for it.
16212
16213         * expression.cs (Conditional.DoResolve): Remove some old code that
16214         is no longer needed, conversions have been fixed.
16215
16216         (ArrayCreationExpression.DoResolve): Return false if we fail to
16217         resolve the inner expression.
16218
16219 2004-09-07  Raja R Harinath  <rharinath@novell.com>
16220
16221         Fix test-290.cs.
16222         * cs-parser.jay (delegate_declaration): Record a delegate
16223         declaration as a type declaration.
16224         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
16225
16226 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
16227
16228         * parameter.cs: Do not crash if the type can not be resolved. 
16229
16230         * expression.cs: Report errors with unsafe pointers, fixes #64896
16231
16232 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
16233
16234         * expression.cs: Pointer arith always needs to do a conv.i
16235         if the operand is a long. fix 65320
16236
16237 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
16238
16239         Fixed cs0619-37.cs, cs0619-38.cs
16240
16241         * enum.cs (GetObsoleteAttribute): Removed.
16242
16243         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
16244         on Enum member is double staged. The first is tested member
16245         and then enum.
16246
16247 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
16248
16249         Fixed #56986, #63631, #65231
16250
16251         * class.cs: (TypeContainer.AddToMemberContainer): New method,
16252         adds member to name container.
16253         (TypeContainer.AddToTypeContainer): New method, adds type to
16254         name container.
16255         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
16256         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
16257         AddOperator): Simplified by reusing AddToMemberContainer.
16258         (TypeContainer.UserDefinedStaticConstructor): Changed to property
16259         instead of field.
16260         (Method.CheckForDuplications): Fixed implementation to test all
16261         possibilities.
16262         (MemberBase): Detection whether member is explicit interface
16263         implementation is now in constructor.
16264         (MemberBase.UpdateMemberName): Handles IndexerName.
16265         (Accessor): Changed to keep also location information.
16266         (AbstractPropertyEventMethod): Is derived from MemberCore.
16267         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
16268         will be emited or not.
16269         (PropertyBase.AreAccessorsDuplicateImplementation):
16270         Tests whether accessors are not in collision with some method.
16271         (Operator): Is derived from MethodCore to simplify common
16272         operations.
16273
16274         * decl.cs (Flags.TestMethodDuplication): Test for duplication
16275         must be performed.
16276         (DeclSpace.AddToContainer): Adds the member to defined_names
16277         table. It tests for duplications and enclosing name conflicts.
16278
16279         * enum.cs (EnumMember): Clean up to reuse the base structures
16280
16281 2004-09-03  Martin Baulig  <martin@ximian.com>
16282
16283         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
16284         into TypeContainer, to make partial classes work again.
16285
16286 2004-09-03  Martin Baulig  <martin@ximian.com>
16287
16288         * rootcontext.cs (RootContext.V2): Removed.
16289
16290 2004-03-23  Martin Baulig  <martin@ximian.com>
16291
16292         * expression.cs (Invocation.OverloadResolve): Added `bool
16293         may_fail' argument and use it instead of the Location.IsNull() hack.
16294
16295 2004-09-03  Martin Baulig  <martin@ximian.com>
16296
16297         Merged latest changes into gmcs.  Please keep this comment in
16298         here, it makes it easier for me to see what changed in MCS since
16299         the last time I merged.
16300
16301 2004-09-03  Raja R Harinath  <rharinath@novell.com>
16302
16303         Fix #61128.
16304         * expression.cs (BetterConversion): Don't allow either conversion 
16305         to be null.  Remove redundant implicit conversion test when 'q ==
16306         null' -- when this function is invoked, we already know that the
16307         implicit conversion exists.
16308         (BetterFunction): Assume that 'best' is non-null.  Remove
16309         redundant reimplementation of IsApplicable when 'best' is null.
16310         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
16311         number of arguments.
16312         (IsAncestralType): Extract from OverloadResolve.
16313         (OverloadResolve): Make robust to the MethodGroupExpr being
16314         unsorted.  Implement all the logic of Section 14.5.5.1, and
16315         support overloading of methods from multiple applicable types.
16316         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
16317
16318         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
16319         (RealError, Warning): Append type of report to related symbol.
16320
16321 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
16322
16323         * enum.cs: Fixed CLS-Compliance checks for enum members.
16324         Error tests cs3008-8.cs, cs3014-8.cs
16325
16326 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
16327
16328         Fixed bug #62342, #63102
16329         * class.cs: ImplementIndexer uses member.IsExplicitImpl
16330         like ImplementMethod.
16331
16332 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
16333
16334         * attribute.cs (Attribute.GetAttributeArgumentExpression):
16335         Fixed bug #65170.
16336
16337 2004-09-02  Martin Baulig  <martin@ximian.com>
16338
16339         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
16340         TypeManager.GetArgumentTypes() rather than calling GetParameters()
16341         on the MethodBase.
16342
16343 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
16344
16345         C# 2.0 Static classes implemented
16346
16347         * class.cs (TypeContainer): instance_constructors,
16348         initialized_fields, initialized_static_fields,
16349         default_constructor, base_inteface_types are protected to be
16350         accessible from StaticClass.
16351         (TypeContainer.DefineDefaultConstructor): New virtual method
16352         for custom default constructor generating
16353         (StaticClass): New class to handle "Static classes" feature.
16354
16355         * cs-parser.jay: Handle static keyword on class like instance
16356         of StaticClass.
16357
16358         * driver.cs: Added "/langversion" command line switch with two
16359         options (iso-1, default).
16360
16361 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
16362
16363         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
16364
16365 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
16366
16367         * delegate.cs: Style.
16368
16369 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
16370
16371         * delegate.cs: Add seperate instance expr field for miguel.
16372
16373 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
16374
16375         * PointerArithmetic (Resolve): make sure we are not doing
16376         pointer arith on void*. Also, make sure we are resolved
16377         by not setting eclass until resolve.
16378
16379         All callers: Make sure that PointerArithmetic gets resolved.
16380
16381 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
16382
16383         * ArrayCreation (LookupType): If the type does not resolve 
16384         to an array, give an error.
16385
16386 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
16387
16388         * statement.cs (Try.Resolve): Fixed bug #64222
16389
16390 2004-08-27  Martin Baulig  <martin@ximian.com>
16391
16392         * class.cs
16393         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
16394         crash here.     
16395
16396 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
16397
16398         * ecore.cs (Constantify): Get underlying type via
16399         System.Enum.GetUnderlyingType to avoid StackOverflow on the
16400         Windows in special cases.
16401
16402 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
16403
16404         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
16405         for obtaining also private methods.
16406         (GetRemoveMethod): Used GetRemoveMethod (true)
16407         for obtaining also private methods.
16408
16409 2004-08-24  Martin Baulig  <martin@ximian.com>
16410
16411         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
16412         MethodAttributes.HideBySig for operators.
16413
16414 2004-08-23  Martin Baulig  <martin@ximian.com>
16415
16416         Back to the old error reporting system :-)
16417
16418         * report.cs (Message): Removed.
16419         (Report.MessageData, ErrorData, WarningData): Removed.
16420         (Report.Error, Warning): Back to the old system.
16421
16422 2004-08-23  Martin Baulig  <martin@ximian.com>
16423
16424         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
16425
16426         * class.cs (TypeContainer.ParentContainer): New public virtual
16427         method; replaces the explicit interface implementation.
16428         (ClassPart.ParentContainer): Override.
16429
16430 2004-08-23  Martin Baulig  <martin@ximian.com>
16431
16432         * statement.cs (Switch): Added support for constant switches; see
16433         #59428 or test-285.cs.
16434
16435 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
16436
16437         Fixed bug #62740.
16438         * statement.cs (GetEnumeratorFilter): Removed useless
16439         logic because C# specs is strict. GetEnumerator must be
16440         public.
16441
16442 2004-08-22  Martin Baulig  <martin@ximian.com>
16443
16444         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
16445         a switch and may break, reset the barrier.  Fixes #59867.
16446
16447 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
16448
16449         CLS-Compliance speed up (~5% for corlib)
16450
16451         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
16452         New method. Tests container for CLS-Compliant names
16453
16454         * class.cs (TypeContainer.VerifyClsName): New method.
16455         Checks whether container name is CLS Compliant.
16456         (Constructor): Implements IMethodData.
16457
16458         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
16459         low-case table for CLS Compliance test.
16460         (MemberCache.VerifyClsParameterConflict): New method.
16461         Checks method parameters for CS3006 error.
16462
16463         * enum.cs (EnumMember): Is derived from MemberCore.
16464         (Enum.VerifyClsName): Optimized for better performance.
16465
16466 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
16467
16468         * report.cs: Renamed Error_T to Error and changed all
16469         references.
16470
16471 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
16472
16473         * class.cs (TypeContainer.IndexerArrayList): New inner class
16474         container for indexers.
16475         (TypeContainer.DefaultIndexerName): New constant for default
16476         indexer name. Replaced all "Item" with this constant.
16477         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
16478
16479         * typemanager.cs (TypeManager.default_member_ctor): Cache here
16480         DefaultMemberAttribute constructor.
16481
16482 2004-08-05  Martin Baulig  <martin@ximian.com>
16483
16484         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
16485         Fix bug #59429.
16486
16487 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
16488
16489         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
16490         multi platforms problem.
16491
16492         * compiler.csproj: Included shared files.
16493
16494 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
16495
16496         Fix bug 60333, 55971 in the more general way
16497         * attribute.cs (Attribute.GetAttributeArgumentExpression):
16498         Added arg_type argument for constant conversion.
16499         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
16500
16501 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
16502
16503         Fix bug #59760
16504         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
16505         OperatorArrayList, MethodCoreArrayList for typecontainer
16506         containers. Changed class member types to these new types.
16507         (MethodArrayList.DefineMembers): Added test for CS0659.
16508
16509 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
16510
16511         * cfold.cs: Synchronize the folding with the code in expression.cs
16512         Binary.DoNumericPromotions for uint operands.
16513
16514         * attribute.cs: Revert patch from Raja, it introduced a regression
16515         while building Blam-1.2.1 (hard to isolate a test case).
16516
16517 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
16518
16519         Fix for #55382
16520         * class.cs:
16521         (TypeContainer.Define): Renamed to DefineContainerMembers because of
16522         name collision.
16523         (MethodCore.parent_method): New member. The method we're overriding
16524         if this is an override method.
16525         (MethodCore.CheckBase): Moved from Method class and made common.
16526         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
16527         private.
16528         (MethodCore.CheckForDuplications): New abstract method. For custom
16529         member duplication search in a container
16530         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
16531         method and its return type.
16532         (Event.conflict_symbol): New member. Symbol with same name in the
16533         parent class.
16534
16535         * decl.cs:
16536         (MemberCache.FindMemberWithSameName): New method. The method
16537         is looking for conflict with inherited symbols.
16538
16539 2004-08-04  Martin Baulig  <martin@ximian.com>
16540
16541         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
16542
16543         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
16544
16545 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
16546
16547         * report.cs (Message): New enum for better error, warning reference in
16548         the code.
16549         (MessageData): New inner abstract class. It generally handles printing of
16550         error and warning messages.
16551         Removed unused Error, Warning, Message methods.
16552
16553 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
16554
16555         Fix for cs0592-8.cs test
16556         * attribute.cs
16557         (Attributable.ValidAttributeTargets): Made public.
16558         (Attribute.ExplicitTarget): New member for explicit target value.
16559         (Attribute.CheckTargets): Now we translate explicit attribute
16560         target to Target here.
16561
16562 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
16563
16564         * ecore.cs (MethodGroupExpr): new IsBase property.
16565
16566         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
16567
16568         * delegate.cs (DelegateCreation): store a MethodGroupExpr
16569         rather than an instance expr.
16570
16571         (DelegateCreation.Emit): Use the method group rather than
16572         the instance expression. Also, if you have base.Foo as the
16573         method for a delegate, make sure to emit ldftn, not ldftnvirt.
16574
16575         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
16576
16577         (NewDelegate.DoResolve): Only check for the existance of Invoke
16578         if the method is going to be needed. Use MethodGroupExpr.
16579
16580         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
16581
16582         * expression.cs: For pointer arith., make sure to use
16583         the size of the type, not the size of the pointer to
16584         the type.
16585
16586 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
16587
16588         Fix for #60722
16589         * class.cs (Class): Added error CS0502 test.
16590
16591 2004-08-03  John Luke  <jluke@cfl.rr.com>
16592             Raja R Harinath  <rharinath@novell.com>
16593
16594         Fix for #60997.
16595         * attribute.cs (Attribute.complained_before): New flag.
16596         (Attribute.ResolveType, Attribute.Resolve),
16597         (Attribute.DefinePInvokeMethod): Set it.
16598         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
16599         
16600 2004-08-03  Martin Baulig  <martin@ximian.com>
16601
16602         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
16603         use a user-defined operator; we still need to do numeric
16604         promotions in case one argument is a builtin type and the other
16605         one has an implicit conversion to that type.  Fixes #62322.
16606
16607 2004-08-02  Martin Baulig  <martin@ximian.com>
16608
16609         * statement.cs (LocalInfo.Flags): Added `IsThis'.
16610         (LocalInfo.IsThis): New public property.
16611         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
16612
16613 2004-08-01  Martin Baulig  <martin@ximian.com>
16614
16615         * class.cs (TypeContainer.GetClassBases): Don't set the default
16616         here since we may get called from GetPartialBases().
16617         (TypeContainer.DefineType): If GetClassBases() didn't return a
16618         parent, use the default one.
16619
16620 2004-07-30  Duncan Mak  <duncan@ximian.com>
16621
16622         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
16623
16624 2004-07-30  Martin Baulig  <martin@ximian.com>
16625
16626         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
16627
16628         * class.cs (SourceMethod): New public class, derive from the
16629         symbol writer's ISourceMethod.
16630         (Method): Use the new symbol writer API.
16631
16632         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
16633         as argument and use the new symbol writer.
16634
16635         * location.cs
16636         (SourceFile): Implement the symbol writer's ISourceFile.
16637         (Location.SymbolDocument): Removed.
16638         (Location.SourceFile): New public property.
16639
16640         * symbolwriter.cs: Use the new symbol writer API.
16641
16642 2004-07-30  Raja R Harinath  <rharinath@novell.com>
16643
16644         * Makefile (install-local): Remove.  Functionality moved to
16645         executable.make.
16646
16647 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
16648
16649         * Makefile: Install mcs.exe.config file together with mcs.exe.
16650         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
16651         correct runtime version.
16652         
16653 2004-07-25  Martin Baulig  <martin@ximian.com>
16654
16655         * class.cs
16656         (TypeContainer.RegisterOrder): Removed, this was unused.
16657         (TypeContainer, interface_order): Removed.
16658         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
16659         TypeContainer as argument since we can also be called with a
16660         `PartialContainer' for a partial class/struct/interface.
16661         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
16662         of checking whether we're an `Interface' - we could be a
16663         `PartialContainer'.
16664         (PartialContainer.Register): Override; call
16665         AddClass()/AddStruct()/AddInterface() on our parent.
16666
16667         * cs-parser.jay (interface_member_declaration): Add things to the
16668         `current_container', not the `current_class'.
16669
16670         * rootcontext.cs (RegisterOrder): The overloaded version which
16671         takes an `Interface' was unused, removed.
16672
16673         * typemanager.cs (TypeManager.LookupInterface): Return a
16674         `TypeContainer', not an `Interface'.
16675         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
16676         contain a `PartialContainer' for an interface, so check it's
16677         `Kind' to figure out what it is.
16678
16679 2004-07-25  Martin Baulig  <martin@ximian.com>
16680
16681         * class.cs (Class.DefaultTypeAttributes): New public constant.
16682         (Struct.DefaultTypeAttributes): Likewise.
16683         (Interface.DefaultTypeAttributes): Likewise.
16684         (PartialContainer.TypeAttr): Override this and add the
16685         DefaultTypeAttributes.
16686
16687 2004-07-25  Martin Baulig  <martin@ximian.com>
16688
16689         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
16690         we can just use the `Parent' field instead.
16691
16692 2004-07-25  Martin Baulig  <martin@ximian.com>
16693
16694         * class.cs (TypeContainer.Emit): Renamed to EmitType().
16695
16696 2004-07-25  Martin Baulig  <martin@ximian.com>
16697
16698         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
16699         our parts before defining any methods.
16700         (TypeContainer.VerifyImplements): Make this virtual.
16701         (ClassPart.VerifyImplements): Override and call VerifyImplements()
16702         on our PartialContainer.
16703
16704 2004-07-25  Martin Baulig  <martin@ximian.com>
16705
16706         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
16707
16708         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
16709         argument, we can just use the `Parent' field instead.
16710
16711         * class.cs
16712         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
16713         (MemberBase.DoDefine): Likewise.
16714
16715 2004-07-24  Martin Baulig  <martin@ximian.com>
16716
16717         * decl.cs (MemberCore.Parent): New public field.
16718         (DeclSpace.Parent): Moved to MemberCore.
16719
16720         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
16721         (MemberBase.ctor): Added TypeContainer argument, pass it to our
16722         parent's .ctor.
16723         (FieldBase, Field, Operator): Likewise.
16724         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
16725         (EventField, Event): Likewise.
16726
16727 2004-07-23  Martin Baulig  <martin@ximian.com>
16728
16729         * class.cs (PartialContainer): New public class.
16730         (ClassPart): New public class.
16731         (TypeContainer): Added support for partial classes.
16732         (TypeContainer.GetClassBases): Splitted some of the functionality
16733         out into GetNormalBases() and GetPartialBases().
16734
16735         * cs-tokenizer.cs (Token.PARTIAL): New token.
16736         (Tokenizer.consume_identifier): Added some hacks to recognize
16737         `partial', but only if it's immediately followed by `class',
16738         `struct' or `interface'.
16739
16740         * cs-parser.jay: Added support for partial clases.
16741
16742 2004-07-23  Martin Baulig  <martin@ximian.com>
16743
16744         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
16745         a `DeclSpace' and also made it readonly.
16746         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
16747         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
16748         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
16749
16750         * cs-parser.jay: Pass the `current_class', not the
16751         `current_container' (at the moment, this is still the same thing)
16752         to a new Method, Property, Event, Indexer or Constructor.
16753
16754 2004-07-23  Martin Baulig  <martin@ximian.com>
16755
16756         * cs-parser.jay (CSharpParser): Added a new `current_class' field
16757         and removed the `current_interface' one.
16758         (struct_declaration, class_declaration, interface_declaration):
16759         Set `current_class' to the newly created class/struct/interface;
16760         set their `Bases' and call Register() before parsing their body.
16761
16762 2004-07-23  Martin Baulig  <martin@ximian.com>
16763
16764         * class.cs (Kind): New public enum.
16765         (TypeContainer): Made this class abstract.
16766         (TypeContainer.Kind): New public readonly field.
16767         (TypeContainer.CheckDef): New public method; moved here from
16768         cs-parser.jay.
16769         (TypeContainer.Register): New public abstract method.
16770         (TypeContainer.GetPendingImplementations): New public abstract
16771         method.
16772         (TypeContainer.GetClassBases): Removed the `is_class' and
16773         `is_iface' parameters.
16774         (TypeContainer.DefineNestedTypes): Formerly known as
16775         DoDefineType().
16776         (ClassOrStruct): Made this class abstract.
16777
16778         * tree.cs (RootTypes): New public type. 
16779
16780 2004-07-20  Martin Baulig  <martin@ximian.com>
16781
16782         * tree.cs (Tree.RecordNamespace): Removed.
16783         (Tree.Namespaces): Removed.
16784
16785         * rootcontext.cs (RootContext.IsNamespace): Removed.
16786
16787         * cs-parser.jay (namespace_declaration): Just create a new
16788         NamespaceEntry here.
16789
16790 2004-07-20  Martin Baulig  <martin@ximian.com>
16791
16792         * statement.cs (ExceptionStatement): New abstract class.  This is
16793         now used as a base class for everyone who's using `finally'.
16794         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
16795         our local variables before using them.
16796
16797         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
16798         virtual method.  This is used by Yield.Resolve() to "steal" an
16799         outer block's `finally' clauses.
16800         (FlowBranchingException): The .ctor now takes an ExceptionStatement
16801         argument.
16802
16803         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
16804         version which takes an ExceptionStatement.  This version must be
16805         used to create exception branchings.
16806
16807         * iterator.cs
16808         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
16809         (Iterator.EmitMoveNext): Added exception support; protect the
16810         block with a `fault' clause, properly handle 'finally' clauses.
16811         (Iterator.EmitDispose): Run all the `finally' clauses here.
16812
16813 2004-07-20  Martin Baulig  <martin@ximian.com>
16814
16815         * iterator.cs: This is the first of a set of changes in the
16816         iterator code.  Match the spec more closely: if we're an
16817         IEnumerable, then GetEnumerator() must be called.  The first time
16818         GetEnumerator() is called, it returns the current instance; all
16819         subsequent invocations (if any) must create a copy.
16820
16821 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
16822
16823         * expression.cs: Resolve the constant expression before returning
16824         it. 
16825
16826 2004-07-19  Martin Baulig  <martin@ximian.com>
16827
16828         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
16829         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
16830         the return type of the new EmitContext.
16831
16832 2004-07-18  Martin Baulig  <martin@ximian.com>
16833
16834         * class.cs (Property.Define): Fix iterators.
16835
16836         * iterators.cs (Iterator.Define): Moved the
16837         `container.AddInterator (this)' call here from the .ctor; only do
16838         it if we resolved successfully.
16839
16840 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
16841
16842         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
16843         `true' for preprocessing directives that we parse.  The return
16844         value indicates whether we should return to regular tokenizing or
16845         not, not whether it was parsed successfully.
16846
16847         In the past if we were in: #if false ... #line #endif, we would
16848         resume parsing after `#line'.  See bug 61604.
16849
16850         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
16851         building: IsEnumType should return true only for enums, not for
16852         enums or System.Enum itself.  This fixes #61593.
16853
16854         Likely what happened is that corlib was wrong: mcs depended on
16855         this bug in some places.  The bug got fixed, we had to add the
16856         hack, which caused bug 61593.
16857
16858         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
16859         that was a workaround for the older conditions.
16860
16861 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
16862
16863         * assign.cs: IAssignMethod has a new interface, as documented
16864         inline. All assignment code now uses this new api.
16865
16866         * ecore.cs, expression.cs: All classes which implement
16867         IAssignMethod now use the new interface.
16868
16869         * expression.cs (Invocation): add a hack to EmitCall so that
16870         IndexerAccess can be the target of a compound assignment without
16871         evaluating its arguments twice.
16872
16873         * statement.cs: Handle changes in Invocation api.
16874
16875 2004-07-16  Martin Baulig  <martin@ximian.com>
16876
16877         * iterators.cs: Rewrote this.  We're now using one single Proxy
16878         class for both the IEnumerable and the IEnumerator interface and
16879         `Iterator' derives from Class so we can use the high-level API.
16880
16881         * class.cs (TypeContainer.AddIterator): New method.
16882         (TypeContainer.DoDefineType): New protected virtual method, which
16883         is called from DefineType().
16884         (TypeContainer.DoDefineMembers): Call DefineType() and
16885         DefineMembers() on all our iterators.
16886         (TypeContainer.Emit): Call Emit() on all our iterators.
16887         (TypeContainer.CloseType): Call CloseType() on all our iterators.
16888
16889         * codegen.cs (EmitContext.CurrentIterator): New public field.
16890
16891 2004-07-15  Martin Baulig  <martin@ximian.com>
16892
16893         * typemanager.cs
16894         (TypeManager.not_supported_exception_type): New type.   
16895
16896 2004-07-14  Martin Baulig  <martin@ximian.com>
16897
16898         * iterators.cs: Use real error numbers.
16899
16900 2004-07-14  Martin Baulig  <martin@ximian.com>
16901
16902         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
16903         requires this to be a System.Collection.IEnumerable and not a
16904         class implementing that interface.
16905         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
16906
16907 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
16908
16909         * class.cs: Fixed previous fix, it broke some error tests.
16910
16911 2004-07-12  Martin Baulig  <martin@ximian.com>
16912
16913         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
16914         Fixes #61293.
16915
16916 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
16917
16918         * assign.cs (LocalTemporary): Add new argument: is_address,If
16919         `is_address' is true, then the value that we store is the address
16920         to the real value, and not the value itself.
16921         
16922         * ecore.cs (PropertyExpr): use the new local temporary
16923         stuff to allow us to handle X.Y += z (where X is a struct)
16924
16925 2004-07-08  Martin Baulig  <martin@ximian.com>
16926
16927         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
16928         not always return, just like we're doing in Using.Resolve().
16929
16930 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
16931
16932         * cs-parser.jay (fixed_statement): flag this as Pinned.
16933
16934 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
16935
16936         * typemanager.cs (TypeManager): Removed MakePinned method, this
16937         mechanism is replaced with the .NET 2.x compatible mechanism of
16938         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
16939
16940         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
16941         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
16942         `IsFixed' property which has a different meaning.
16943
16944 2004-07-02  Raja R Harinath  <rharinath@novell.com>
16945
16946         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
16947         visible from inside a nested class, not just the names of the
16948         immediately enclosing class.
16949         Fix for bug #60730.
16950
16951 2004-06-24  Raja R Harinath  <rharinath@novell.com>
16952
16953         * expression.cs (BetterConversion): Remove buggy special-case
16954         handling of "implicit constant expression conversions".  At this
16955         point, we already know that the conversion is possible -- we're
16956         only checking to see which is better.
16957
16958 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
16959
16960         * cs-parser.jay: Added error CS0210 test.
16961
16962 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
16963
16964         * cs-parser.jay: Added error CS0134 test.
16965
16966 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
16967
16968         Fix bug #52507
16969         * cs-parser.jay: Added error CS0145 test.
16970
16971 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
16972
16973         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
16974
16975 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
16976         
16977         * expression.cs (StackAlloc.Resolve): The argument may not
16978         be a constant; deal with this case.
16979         
16980 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
16981
16982         * attribute.cs (IndexerName_GetIndexerName): Renamed to
16983         GetIndexerAttributeValue.
16984         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
16985
16986         * class.cs (Indexer.Define): Added error tests for CS0415,
16987         CS0609.
16988
16989 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
16990
16991         * attribute.cs (Attribute.Resolve): Keep field code in sync with
16992         property code.
16993
16994 2004-06-23  Martin Baulig  <martin@ximian.com>
16995
16996         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
16997         neither return nor throw, reset the barrier as well.  Fixes #60457.
16998
16999 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
17000
17001         * class.cs : EventAttributes is now set to None by default.
17002           This fixes bug #60459.
17003
17004 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
17005
17006         Fix bug #60219
17007         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
17008         Don't throw exception but return null (it's sufficient now).
17009
17010 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
17011
17012         * typemanager.cs (GetArgumentTypes): Faster implementation.
17013
17014 2004-06-18  Martin Baulig  <martin@ximian.com>
17015
17016         * attribute.cs (Attribute.Resolve): Check whether we're an
17017         EmptyCast which a Constant child.  Fixes #60333.
17018
17019 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
17020
17021         * statement.cs (EmitCollectionForeach): Account for the fact that
17022         not all valuetypes are in areas which we can take the address of.
17023         For these variables, we store to a temporary variable. Also, make
17024         sure that we dont emit a `callvirt' on a valuetype method.
17025
17026 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
17027
17028         * expression.cs (StackAlloc.DoReSolve): Added test for
17029         negative parameter (CS0247).
17030
17031 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
17032
17033         Fix bug #59792
17034         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
17035
17036 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
17037
17038         Fix bug #59781
17039         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
17040         ulong.
17041
17042 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
17043
17044         Fix bug #58254 & cs1555.cs, cs1556.cs
17045         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
17046
17047 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
17048
17049         * cs-parser.jay: Added error CS1669 test for indexers.
17050
17051 2004-06-11  Martin Baulig  <martin@ximian.com>
17052
17053         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
17054         call this twice: for params and varargs methods.
17055
17056 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17057
17058         * class.cs:
17059         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
17060
17061 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17062
17063         * attribute.cs (Attribute.GetValidTargets): Made public.
17064
17065         * class.cs: 
17066         (AbstractPropertyEventMethod): New class for better code sharing.
17067         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
17068         CS1667 report.
17069         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
17070
17071 2004-06-11  Raja R Harinath  <rharinath@novell.com>
17072
17073         Fix bug #59477.
17074         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
17075         that the call to Resolve is part of a MemberAccess.
17076         (Expression.Resolve): Use it for SimpleName resolution.
17077         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
17078         Add 'intermediate' boolean argument.
17079         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
17080         error message when the SimpleName can be resolved ambiguously
17081         between an expression and a type.
17082         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
17083         public.
17084         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
17085         call on the left-side.
17086
17087 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17088
17089         * class.cs:
17090         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
17091
17092 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17093
17094         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
17095
17096 2004-06-11  Martin Baulig  <martin@ximian.com>
17097
17098         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
17099         varargs methods if applicable.
17100
17101 2004-06-11  Martin Baulig  <martin@ximian.com>
17102
17103         * expression.cs (Invocation.EmitCall): Don't use
17104         `method.CallingConvention == CallingConventions.VarArgs' since the
17105         method could also have `CallingConventions.HasThis'.
17106
17107 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17108
17109         * class.cs (Event.GetSignatureForError): Implemented.
17110         Fixed crash in error test cs3010.cs
17111
17112 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
17113
17114         * cs-tokenizer.cs: Change the way we track __arglist to be
17115         consistent with the other keywords.
17116
17117 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
17118
17119         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
17120         tomorrow.
17121
17122 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
17123
17124         * codegen.cs: Check that all referenced assemblies have a strongname
17125         before strongnaming the compiled assembly. If not report error CS1577.
17126         Fix bug #56563. Patch by Jackson Harper.
17127         * typemanager.cs: Added a method to return all referenced assemblies.
17128         Fix bug #56563. Patch by Jackson Harper.
17129
17130 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
17131
17132         * class.cs:
17133         (Method.ApplyAttributeBuilder): Moved and added conditional
17134         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
17135
17136         * delegate.cs:
17137         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
17138
17139 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
17140
17141         Fixed #59640
17142         * class.cs: (EventField.attribute_targets): Changed default target.
17143
17144 2004-06-08  Martin Baulig  <martin@ximian.com>
17145
17146         * expression.cs (Invocation.EmitCall): Enable varargs methods.
17147
17148 2004-06-08  Martin Baulig  <martin@ximian.com>
17149
17150         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
17151
17152 2004-06-07  Martin Baulig  <martin@ximian.com>
17153
17154         Added support for varargs methods.
17155
17156         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
17157         keyword.
17158
17159         * cs-parser.jay: Added support for `__arglist'.
17160
17161         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
17162
17163         * expression.cs (Argument.AType): Added `ArgList'.
17164         (Invocation): Added support for varargs methods.
17165         (ArglistAccess): New public class.
17166         (Arglist): New public class.
17167
17168         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
17169
17170         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
17171         a method's top-level block if the method has varargs.
17172
17173         * support.cs (ReflectionParameters, InternalParameters): Added
17174         support for varargs methods.    
17175
17176 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
17177
17178         * class.cs: Provide location in indexer error report.
17179
17180         * driver.cs: Use standard names.
17181
17182         * namespace.cs: Catch the use of using after a namespace has been
17183         declared also on using aliases.
17184
17185 2004-06-03  Raja R Harinath  <rharinath@novell.com>
17186
17187         Bug #50820.
17188         * typemanager.cs (closure_private_ok, closure_invocation_type)
17189         (closure_qualifier_type, closure_invocation_assembly)
17190         (FilterWithClosure): Move to ...
17191         (Closure): New internal nested class.
17192         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
17193         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
17194         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
17195         (MemberLookup, MemberLookupFailed): Use it.
17196         * expression.cs (New.DoResolve): Treat the lookup for the
17197         constructor as being qualified by the 'new'ed type.
17198         (Indexers.GetIndexersForTypeOrInterface): Update.
17199
17200 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
17201
17202         * attribute.cs
17203         (GetConditionalAttributeValue): New method. Returns
17204         condition of ConditionalAttribute.
17205         (SearchMulti): New method.  Returns all attributes of type 't'.
17206         Use it when attribute is AllowMultiple = true.
17207         (IsConditionalMethodExcluded): New method.
17208
17209         * class.cs
17210         (Method.IsExcluded): Implemented. Returns true if method has conditional
17211         attribute and the conditions is not defined (method is excluded).
17212         (IMethodData): Extended interface for ConditionalAttribute support.
17213         (PropertyMethod.IsExcluded): Implemented.
17214
17215         * decl.cs
17216         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
17217
17218         * expression.cs
17219         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
17220         on the method.
17221
17222 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
17223
17224         * expression.cs (ArrayCreationExpression): Make this just an
17225         `expression'. It can't be a statement, so the code here was
17226         dead.
17227
17228 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
17229
17230         Fixed #59072
17231         * typemanager.cs (GetFullNameSignature): New method for
17232         MethodBase types.
17233
17234 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
17235
17236         Fixed #56452
17237         * class.cs (MemberBase.GetSignatureForError): New virtual method.
17238         Use this method when MethodBuilder is null.
17239         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
17240         Added test for error CS0626 (MONO reports error for this situation).
17241         (IMethodData.GetSignatureForError): Extended interface.
17242
17243 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
17244
17245         * attribute.cs
17246         (AttributeTester.GetObsoleteAttribute): Returns instance of
17247         ObsoleteAttribute when type is obsolete.
17248
17249         * class.cs
17250         (TypeContainer.VerifyObsoleteAttribute): Override.
17251         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
17252         (MethodCode.VerifyObsoleteAttribute): Override.
17253         (MemberBase.VerifyObsoleteAttribute): Override.
17254
17255         * decl.cs
17256         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
17257         and report proper error.
17258
17259         *delegate.cs
17260         Delegate.VerifyObsoleteAttribute): Override.
17261
17262         * ecore.cs
17263         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
17264         and report proper error.
17265         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
17266
17267         * enum.cs
17268         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
17269         and enum member.
17270
17271         * expression.cs
17272         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
17273         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
17274         Added test for ObsoleteAttribute.
17275
17276         * statement.cs
17277         (Catch): Derived from Statement.
17278
17279 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
17280  
17281         Fixed bug #59071 & cs0160.cs
17282  
17283         * statement.cs (Try.Resolve): Check here whether order of catch
17284         clauses matches their dependencies.
17285
17286 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
17287
17288         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
17289         caused a regression: #59343.  Referencing nested classes from an
17290         assembly stopped working.
17291
17292 2004-05-31  Martin Baulig  <martin@ximian.com>
17293
17294         MCS is now frozen for beta 2.
17295
17296 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
17297
17298         * convert.cs: add a trivial cache for overload operator resolution.
17299
17300 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
17301
17302         * decl.cs: If possible, use lookuptypedirect here. We can only do
17303         this if there is no `.' after the namespace. Avoids using
17304         LookupType, which does lots of slow processing.
17305         (FindNestedType) New method, does what it says :-).
17306         * namespace.cs: use LookupTypeDirect.
17307         * rootcontext.cs: use membercache, if possible.
17308         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
17309
17310 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
17311
17312         * expression.cs:
17313         According to the spec, 
17314
17315         In a member access of the form E.I, if E is a single identifier,
17316         and if the meaning of E as a simple-name (§7.5.2) is a constant,
17317         field, property, localvariable, or parameter with the same type as
17318         the meaning of E as a type-name (§3.8), then both possible
17319         meanings of E are permitted.
17320
17321         We did not check that E as a simple-name had the same type as E as
17322         a type name.
17323
17324         This trivial check gives us 5-7% on bootstrap time.
17325
17326 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
17327
17328         * expression.cs (Invocation.OverloadResolve): Avoid the
17329         use of hashtables and boxing here by allocating on demand.
17330
17331 2004-05-30  Martin Baulig  <martin@ximian.com>
17332
17333         * rootcontext.cs (RootContext.LookupType): Don't cache things if
17334         we're doing a silent lookup.  Don't try to lookup nested types in
17335         TypeManager.object_type (thanks to Ben Maurer).
17336
17337 2004-05-30  Martin Baulig  <martin@ximian.com>
17338
17339         Committing a patch from Ben Maurer.
17340
17341         * rootcontext.cs (RootContext.LookupType): Cache negative results.
17342
17343 2004-05-29  Martin Baulig  <martin@ximian.com>
17344
17345         * class.cs (IMethodData.ShouldIgnore): New method.
17346
17347         * typemanager.cs (TypeManager.MethodFlags): Don't take a
17348         `Location' argument, we don't need it anywhere.  Use
17349         `IMethodData.ShouldIgnore ()' instead of
17350         `MethodData.GetMethodFlags ()'.
17351         (TypeManager.AddMethod): Removed.
17352         (TypeManager.AddMethod2): Renamed to AddMethod.
17353
17354 2004-05-29  Martin Baulig  <martin@ximian.com>
17355
17356         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
17357
17358         * convert.cs (Convert.ImplicitReferenceConversion): If we're
17359         converting from a class type S to an interface type and we already
17360         have an object on the stack, don't box it again.  Fixes #52578.
17361
17362 2004-05-29  Martin Baulig  <martin@ximian.com>
17363
17364         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
17365         Added support for `params' parameters.  Fixes #59267.
17366
17367 2004-05-29  Martin Baulig  <martin@ximian.com>
17368
17369         * literal.cs (NullPointer): Provide a private .ctor which sets
17370         `type' to TypeManager.object_type.  Fixes #59048.
17371
17372 2004-05-29  Martin Baulig  <martin@ximian.com>
17373
17374         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
17375         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
17376
17377         * ecore.cs (EventExpr.instance_expr): Make the field private.
17378
17379 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
17380
17381         Fixed bug #50080 & cs0214-2.cs
17382         * expression.cs (Cast.DoResolve): Check unsafe context here.
17383         
17384         * statement.cs (Resolve.DoResolve): Likewise.
17385
17386 2004-05-26  Martin Baulig  <martin@ximian.com>
17387
17388         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
17389
17390         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
17391         (RootContext.LookupType): Pass down the `silent' flag.
17392
17393 2004-05-25  Martin Baulig  <martin@ximian.com>
17394
17395         * expression.cs
17396         (MethodGroupExpr.IdenticalTypeName): New public property.
17397         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
17398         expression actually refers to a type.
17399
17400 2004-05-25  Martin Baulig  <martin@ximian.com>
17401
17402         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
17403         for #56176 and made it actually work.
17404
17405 2004-05-25  Martin Baulig  <martin@ximian.com>
17406
17407         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
17408         (FieldExpr, PropertyExpr): Override and implement
17409         CacheTemporaries.  Fixes #52279.
17410
17411 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
17412
17413         * location.cs: In the new compiler listing a file twice is a
17414         warning, not an error.
17415
17416 2004-05-24  Martin Baulig  <martin@ximian.com>
17417
17418         * enum.cs (Enum.DefineType): For the `BaseType' to be a
17419         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
17420
17421 2004-05-24  Martin Baulig  <martin@ximian.com>
17422
17423         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
17424         walking the `using' list.  Fixes #53921.
17425
17426 2004-05-24  Martin Baulig  <martin@ximian.com>
17427
17428         * const.cs (Const.LookupConstantValue): Added support for
17429         EmptyCast's; fixes #55251.
17430
17431 2004-05-24  Martin Baulig  <martin@ximian.com>
17432
17433         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
17434         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
17435         which does the CS0135 check.  The reason is that we first need to
17436         check whether the variable actually exists.
17437
17438 2004-05-24  Martin Baulig  <martin@ximian.com>
17439
17440         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
17441         than RootContext.LookupType() to find the explicit interface
17442         type.  Fixes #58584.
17443
17444 2004-05-24  Raja R Harinath  <rharinath@novell.com>
17445
17446         * Makefile: Simplify.  Use executable.make.
17447         * mcs.exe.sources: New file.  List of sources of mcs.exe.
17448
17449 2004-05-24  Anders Carlsson  <andersca@gnome.org>
17450
17451         * decl.cs:
17452         * enum.cs:
17453         Use the invariant culture when doing String.Compare for CLS case
17454         sensitivity.
17455         
17456 2004-05-23  Martin Baulig  <martin@ximian.com>
17457
17458         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
17459         don't have any dots.  Fixes #52622, added cs0246-8.cs.
17460
17461         * namespace.cs (NamespaceEntry.Lookup): Likewise.
17462         
17463 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
17464
17465         * class.cs (MemberBase.Define): Reuse MemberType member for 
17466         resolved type. Other methods can use it too.
17467
17468 2004-05-23  Martin Baulig  <martin@ximian.com>
17469
17470         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
17471         the variable also exists in the current block (otherwise, we need
17472         to report a CS0103).  Fixes #58670.
17473
17474 2004-05-23  Martin Baulig  <martin@ximian.com>
17475
17476         * flowanalysis.cs (Reachability.Reachable): Compute this
17477         on-the-fly rather than storing it as a field.
17478
17479 2004-05-23  Martin Baulig  <martin@ximian.com>
17480
17481         * flowanalysis.cs (Reachability.And): Manually compute the
17482         resulting `barrier' from the reachability.      
17483        
17484 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
17485
17486         Fix bug #57835
17487         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
17488         instance of ObsoleteAttribute when symbol is obsolete.
17489
17490         * class.cs
17491         (IMethodData): Extended interface for ObsoleteAttribute support.
17492
17493 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
17494
17495         * attribute.cs: Fix bug #55970
17496
17497 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
17498
17499         Fix bug #52705
17500         * attribute.cs
17501         (GetObsoleteAttribute): New method. Creates the instance of
17502         ObsoleteAttribute.
17503         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
17504         ObsoleteAttribute when member is obsolete.
17505         (AttributeTester.Report_ObsoleteMessage): Common method for
17506         Obsolete error/warning reporting.
17507
17508         * class.cs
17509         (TypeContainer.base_classs_type): New member for storing parent type.
17510
17511         * decl.cs
17512         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
17513         for this MemberCore.
17514
17515 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
17516
17517         * attribute.cs, const.cs: Fix bug #58590
17518
17519 2004-05-21  Martin Baulig  <martin@ximian.com>
17520
17521         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
17522         out parameters if the end of the method is unreachable.  Fixes
17523         #58098. 
17524
17525 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
17526
17527         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
17528         Hari was right, why extra method.
17529
17530 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
17531
17532         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
17533
17534 2004-05-20  Martin Baulig  <martin@ximian.com>
17535
17536         Merged this back from gmcs to keep the differences to a minumum.
17537
17538         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
17539         instead of a Declspace.
17540         (Attribute.ResolveType): Likewise.
17541         (Attributes.Search): Likewise.
17542         (Attributes.Contains): Likewise.
17543         (Attributes.GetClsCompliantAttribute): Likewise.
17544
17545         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
17546         argument.
17547         (MethodData.ApplyAttributes): Take an EmitContext instead of a
17548         DeclSpace.
17549
17550 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
17551
17552         Fix bug #58688 (MCS does not report error when the same attribute
17553         is assigned twice)
17554
17555         * attribute.cs (Attribute.Emit): Distinction between null and default.
17556
17557 2004-05-19  Raja R Harinath  <rharinath@novell.com>
17558
17559         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
17560         of a top-level attribute without an attribute target.
17561         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
17562         Make non-static.
17563         (Attribute.Conditional_GetConditionName), 
17564         (Attribute.Obsolete_GetObsoleteMessage): Update.
17565         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
17566         part of ScanForIndexerName.
17567         (Attribute.CanIgnoreInvalidAttribute): New function.
17568         (Attribute.ScanForIndexerName): Move to ...
17569         (Attributes.ScanForIndexerName): ... here.
17570         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
17571         (Attributes.Search): New internal variant that can choose not to
17572         complain if types aren't resolved.  The original signature now
17573         complains.
17574         (Attributes.GetClsCompliantAttribute): Use internal variant, with
17575         complaints suppressed.
17576         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
17577         only if it not useful.
17578         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
17579         top-level for attributes that are shared between the assembly
17580         and a top-level class.
17581         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
17582         * class.cs: Update to reflect changes.
17583         (DefineIndexers): Fuse loops.
17584         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
17585         a couple more variants of attribute names.
17586
17587 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
17588
17589         Fix bug #52585 (Implemented explicit attribute declaration)
17590
17591         * attribute.cs:
17592         (Attributable.ValidAttributeTargets): New abstract method. It gets
17593         list of valid attribute targets for explicit target declaration.
17594         (Attribute.Target): It holds target itself.
17595         (AttributeSection): Removed.
17596         (Attribute.CheckTargets): New method. It checks whether attribute
17597         target is valid for the current element.
17598
17599         * class.cs:
17600         (EventProperty): New class. For events that are declared like
17601         property (with add and remove accessors).
17602         (EventField): New class. For events that are declared like field.
17603         class.cs
17604
17605         * cs-parser.jay: Implemented explicit attribute target declaration.
17606
17607         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
17608         Override ValidAttributeTargets.
17609
17610         * parameter.cs:
17611         (ReturnParameter): Class for applying custom attributes on 
17612         the return type.
17613         (ParameterAtribute): New class. Class for applying custom
17614         attributes on the parameter type.
17615
17616 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
17617
17618         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
17619         definitions. 
17620
17621         (Method): Allow UNSAFE here.
17622
17623         * modifiers.cs: Support unsafe reporting.
17624
17625 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
17626
17627         * decl.cs: Fix bug #58478.
17628
17629 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17630
17631         * statement.cs: When checking for unreachable code on an EmptyStatement,
17632         set the location. Fixes bug #58488.
17633
17634 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
17635
17636         * driver.cs: Add -pkg handling.
17637
17638         From Gonzalo: UseShelLExecute=false
17639
17640 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
17641
17642         * attribute.cs:
17643         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
17644         for attribute.
17645         (Attribute.IsClsCompliaceRequired): Moved to base for better
17646         accesibility.
17647         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
17648         when attribute is AttributeUsageAttribute.
17649         (Attribute.GetValidTargets): Simplified.
17650         (Attribute.GetAttributeUsage): New method returns AttributeUsage
17651         attribute for this type.
17652         (Attribute.ApplyAttributes): Method renamed to Emit and make
17653         non-static.
17654         (GlobalAttributeSection): New class for special handling of global
17655         attributes (assembly, module).
17656         (AttributeSection.Emit): New method.
17657
17658         * class.cs: Implemented Attributable abstract methods.
17659         (MethodCore.LabelParameters): Moved to Parameter class.
17660         (Accessor): Is back simple class.
17661         (PropertyMethod): Implemented Attributable abstract class.
17662         (DelegateMethod): Implemented Attributable abstract class.
17663         (Event): New constructor for disctintion between normal Event
17664         and Event with accessors.
17665
17666         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
17667
17668         * codegen.cs, const.cs, decl.cs, delegate.cs:
17669         (CommonAssemblyModulClass): Implemented Attributable abstract class
17670         and simplified.
17671
17672         * enum.cs: Implement IAttributeSupport interface.
17673         (EnumMember): New class for emum members. Implemented Attributable
17674         abstract class
17675
17676         * parameter.cs:
17677         (ParameterBase): Is abstract.
17678         (ReturnParameter): New class for easier [return:] attribute handling.
17679
17680         * typemanager.cs: Removed builder_to_attr.
17681
17682 2004-05-11  Raja R Harinath  <rharinath@novell.com>
17683
17684         Fix bug #57151.
17685         * attribute.cs (Attribute.GetPositionalValue): New function.
17686         * class.cs (TypeContainer.VerifyMembers): New function.
17687         (TypeContainer.Emit): Use it.
17688         (ClassOrStruct): New base class for Class and Struct.
17689         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
17690         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
17691         class.
17692         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
17693         then each non-static field should have a FieldOffset attribute.
17694         Otherwise, none of the fields should have a FieldOffset attribute.
17695         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
17696         and FieldOffset attributes.
17697         * typemanager.cs (TypeManager.struct_layout_attribute_type)
17698         (TypeManager.field_offset_attribute_type): New core types.
17699         (TypeManager.InitCoreTypes): Initialize them.
17700
17701 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
17702
17703         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
17704         Return correct type.
17705         From bug #58270.
17706
17707 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
17708
17709         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
17710         be implicitly converted to ulong.
17711         
17712         * expression.cs: The logic for allowing operator &, | and ^ worked
17713         was wrong, it worked before because we did not report an error in
17714         an else branch.  Fixes 57895.
17715
17716         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
17717         allow volatile fields to be reference types.
17718
17719 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
17720
17721         * driver.cs: Add support for /debug-
17722
17723 2004-05-07  Raja R Harinath  <rharinath@novell.com>
17724
17725         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
17726         Add a 'complain' parameter to silence errors.
17727         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
17728         silently overlooked type-resolutions.
17729         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
17730         to reflect changes.
17731         (Attributes.Search): New function.
17732         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
17733         (Attributes.GetAttributeFullName): Remove hack.
17734         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
17735         Update to reflect changes.
17736         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
17737         Use Attributes.Search instead of nested loops.
17738
17739 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
17740
17741         * decl.cs:
17742         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
17743         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
17744         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
17745
17746         * report.cs: (Report.Warning): Renamed to Warning_T because of
17747         parameter collision.
17748
17749 2004-05-05  Raja R Harinath  <rharinath@novell.com>
17750
17751         * expression.cs (MemberAccess.ResolveMemberAccess):
17752         Exit with non-zero status after Report.Error.
17753         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
17754         Likewise.
17755         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
17756
17757 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
17758
17759         * support.cs: Don't hang when the file is empty.
17760
17761 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
17762
17763         * support.cs: In SeekableStreamReader, compute the preamble size of the
17764           underlying stream. Position changes should take into account that initial
17765           count of bytes.
17766
17767 2004-05-03  Todd Berman  <tberman@sevenl.net>
17768
17769         * driver.cs: remove unused GetSysVersion function.
17770
17771 2004-05-03  Todd Berman  <tberman@sevenl.net>
17772
17773         * driver.cs: Remove the hack from saturday, as well as the hack
17774         from jackson (LoadAssemblyFromGac), also adds the CWD to the
17775         link_paths to get that bit proper.
17776
17777 2004-05-01  Todd Berman  <tberman@sevenl.net>
17778
17779         * driver.cs: Try a LoadFrom before a Load, this checks the current
17780         path. This is currently a bug in mono that is be fixed, however, this
17781         provides a workaround for now. This will be removed when the bug
17782         is fixed.
17783
17784 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
17785
17786         * CryptoConvert.cs: Updated to latest version. Fix issue with 
17787         incomplete key pairs (#57941).
17788
17789 2004-05-01  Todd Berman  <tberman@sevenl.net>
17790
17791         * driver.cs: Remove '.' from path_chars, now System.* loads properly
17792         from the GAC
17793
17794 2004-04-30  Jackson Harper  <jackson@ximian.com>
17795
17796         * codegen.cs: Open keys readonly.
17797         
17798 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17799
17800         * typemanager.cs: don't report cyclic struct layout when a struct
17801         contains 2 or more fields of the same type. Failed for Pango.AttrShape
17802         which has 2 Pango.Rectangle fields.
17803
17804 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
17805
17806         * expression.cs: Handle IntPtr comparisons with IL code
17807         rather than a method call.
17808
17809 2004-04-29  Martin Baulig  <martin@ximian.com>
17810
17811         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
17812         the list of PropertyInfo's in class hierarchy and find the
17813         accessor.  Fixes #56013.
17814
17815 2004-04-29  Martin Baulig  <martin@ximian.com>
17816
17817         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
17818
17819 2004-04-29  Martin Baulig  <martin@ximian.com>
17820
17821         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
17822
17823         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
17824
17825 2004-04-29  Martin Baulig  <martin@ximian.com>
17826
17827         * class.cs (ConstructorInitializer.Resolve): Check whether the
17828         parent .ctor is accessible.  Fixes #52146.
17829
17830 2004-04-29  Martin Baulig  <martin@ximian.com>
17831
17832         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
17833
17834         * statement.cs (Using.EmitLocalVariableDecls): Use
17835         TypeManager.idisposable_type, not typeof (IDisposable).
17836         (Foreach.EmitCollectionForeach): Added support for valuetypes.
17837
17838 2004-04-29  Martin Baulig  <martin@ximian.com>
17839
17840         * class.cs (Event.Define): Don't emit the field and don't set
17841         RTSpecialName and SpecialName for events on interfaces.  Fixes
17842         #57703. 
17843
17844 2004-04-29  Raja R Harinath  <rharinath@novell.com>
17845
17846         Refactor Attribute.ApplyAttributes.
17847         * attribute.cs (Attributable): New base class for objects that can
17848         have Attributes applied on them.
17849         (Attribute): Make AttributeUsage fields public.
17850         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
17851         (Attribute.IsInternalCall): New property.
17852         (Attribute.UsageAttr): Convert to a public read-only property.
17853         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
17854         (Attribute.ResolveType, Attribute.Resolve)
17855         (Attribute.ScanForIndexerName): Update to reflect changes.
17856         (Attribute.CheckAttributeTarget): Re-format.
17857         (Attribute.ApplyAttributes): Refactor, to various
17858         Attributable.ApplyAttributeBuilder methods.
17859         * decl.cs (MemberCore): Make Attributable.
17860         * class.cs (Accessor): Make Attributable.
17861         (MethodData.ApplyAttributes): Use proper attribute types, not
17862         attribute names.
17863         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
17864         (TypeContainer.ApplyAttributeBuilder)
17865         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
17866         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
17867         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
17868         (Operator.ApplyAttributeBuilder): New factored-out methods.
17869         * const.cs (Const.ApplyAttributeBuilder): Likewise.
17870         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
17871         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
17872         * parameter.cs (ParameterBase): New Attributable base class
17873         that can also represent Return types.
17874         (Parameter): Update to the changes.
17875
17876 2004-04-29  Jackson Harper  <jackson@ximian.com>
17877
17878         * driver.cs: Prefer the corlib system version when looking for
17879         assemblies in the GAC. This is still a hack, but its a better hack
17880         now.
17881         
17882 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
17883
17884         * decl.cs, enum.cs: Improved error 3005 reporting.
17885   
17886         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
17887         (related_symbols): New private member for list of symbols
17888         related to reported error/warning.
17889         
17890         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
17891
17892 2004-04-29  Martin Baulig  <martin@ximian.com>
17893
17894         * ecore.cs (Expression.Constantify): If we're an enum and
17895         TypeManager.TypeToCoreType() doesn't give us another type, use
17896         t.UnderlyingSystemType.  Fixes #56178.  
17897
17898 2004-04-29  Martin Baulig  <martin@ximian.com>
17899
17900         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
17901         interfaces and for each interface, only add members directly
17902         declared in that interface.  Fixes #53255.
17903
17904 2004-04-28  Martin Baulig  <martin@ximian.com>
17905
17906         * expression.cs (ConditionalLogicalOperator): Use a temporary
17907         variable for `left' to avoid that we evaluate it more than once;
17908         bug #52588.
17909
17910 2004-04-28  Martin Baulig  <martin@ximian.com>
17911
17912         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
17913         `void[]' (CS1547).
17914
17915 2004-04-28  Martin Baulig  <martin@ximian.com>
17916
17917         * statement.cs (LocalInfo.Resolve): Check whether the type is not
17918         void (CS1547).
17919
17920         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
17921         whether the type is not void (CS1547).
17922
17923 2004-04-28  Martin Baulig  <martin@ximian.com>
17924
17925         * expression.cs (Unary.DoResolveLValue): Override this and report
17926         CS0131 for anything but Operator.Indirection.
17927
17928 2004-04-28  Martin Baulig  <martin@ximian.com>
17929
17930         Committing a patch from Ben Maurer; see bug #50820.
17931
17932         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
17933         check for classes.
17934
17935         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
17936         classes.        
17937
17938 2004-04-28  Martin Baulig  <martin@ximian.com>
17939
17940         Committing a patch from Ben Maurer; see bug #50820.
17941
17942         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
17943         check for classes.
17944
17945         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
17946         classes.        
17947
17948 2004-04-28  Martin Baulig  <martin@ximian.com>
17949
17950         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
17951         (Block.AddLabel): Call DoLookupLabel() to only search in the
17952         current block.
17953
17954 2004-04-28  Martin Baulig  <martin@ximian.com>
17955
17956         * cfold.cs (ConstantFold.BinaryFold): Added special support for
17957         comparing StringConstants and NullLiterals in Equality and Inequality.
17958
17959 2004-04-28  Jackson Harper  <jackson@ximian.com>
17960
17961         * driver.cs: Attempt to load referenced assemblies from the
17962         GAC. This is the quick and dirty version of this method that
17963         doesnt take into account versions and just takes the first
17964         canidate found. Will be good enough for now as we will not have more
17965         then one version installed into the GAC until I update this method.
17966
17967 2004-04-28  Martin Baulig  <martin@ximian.com>
17968
17969         * typemanager.cs (TypeManager.CheckStructCycles): New public
17970         static method to check for cycles in the struct layout.
17971
17972         * rootcontext.cs (RootContext.PopulateTypes): Call
17973         TypeManager.CheckStructCycles() for each TypeContainer.
17974         [Note: We only need to visit each type once.]
17975
17976 2004-04-28  Martin Baulig  <martin@ximian.com>
17977
17978         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
17979
17980         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
17981         success and added `out object value'.  Use a `bool resolved' field
17982         to check whether we've already been called rather than
17983         `ConstantValue != null' since this breaks for NullLiterals.
17984
17985 2004-04-28  Raja R Harinath  <rharinath@novell.com>
17986
17987         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
17988         setting of this flag, since the 'set' method may be non-public.
17989
17990 2004-04-28  Raja R Harinath  <rharinath@novell.com>
17991
17992         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
17993         check on current_vector.Block.
17994
17995 2004-04-27  Martin Baulig  <martin@ximian.com>
17996
17997         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
17998         a field initializer.  Fixes #56459.
17999
18000 2004-04-27  Martin Baulig  <martin@ximian.com>
18001
18002         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
18003         we're not attempting to use an indexer.  Fixes #52154.
18004
18005 2004-04-27  Martin Baulig  <martin@ximian.com>
18006
18007         * statement.cs (Return): Don't create a return label if we don't
18008         need it; reverts my change from January 20th.  Thanks to Ben
18009         Maurer for this.
18010
18011 2004-04-27  Martin Baulig  <martin@ximian.com>
18012
18013         According to the spec, `goto' can only leave a nested scope, but
18014         never enter it.
18015
18016         * statement.cs (Block.LookupLabel): Only lookup in the current
18017         block, don't recurse into parent or child blocks.
18018         (Block.AddLabel): Check in parent and child blocks, report
18019         CS0140/CS0158 if we find a duplicate.
18020         (Block): Removed this indexer for label lookups.
18021         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
18022         this already does the error reporting for us.
18023
18024         * flowanalysis.cs
18025         (FlowBranching.UsageVector.Block): New public variable; may be null.
18026         (FlowBranching.CreateSibling): Added `Block' argument.
18027         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
18028         label for the target of a `goto' and check whether we're not
18029         leaving a `finally'.
18030
18031 2004-04-27  Martin Baulig  <martin@ximian.com>
18032
18033         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
18034         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
18035         just for returns).
18036
18037 2004-04-27  Martin Baulig  <martin@ximian.com>
18038
18039         * statement.cs (Block.AddLabel): Also check for implicit blocks
18040         and added a CS0158 check.
18041
18042 2004-04-27  Martin Baulig  <martin@ximian.com>
18043
18044         * flowanalysis.cs (FlowBranchingLoop): New class.
18045         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
18046         UsageVector's instead of an ArrayList.
18047         (FlowBranching.Label): Likewise.
18048         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
18049         (FlowBranching.AddBreakVector): New method.
18050
18051 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
18052
18053         * attribute.cs: Small regression fix: only convert the type if we
18054         the type is different, fixes System.Drawing build.
18055
18056 2004-04-27  Martin Baulig  <martin@ximian.com>
18057
18058         * attribute.cs (Attribute.Resolve): If we have a constant value
18059         for a named field or property, implicity convert it to the correct
18060         type.
18061
18062 2004-04-27  Raja R Harinath  <rharinath@novell.com>
18063
18064         * statement.cs (Block.Block): Implicit blocks share
18065         'child_variable_names' fields with parent blocks.
18066         (Block.AddChildVariableNames): Remove.
18067         (Block.AddVariable): Mark variable as "used by a child block" in
18068         every surrounding block.
18069         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
18070         been used in a child block, complain about violation of "Invariant
18071         meaning in blocks" rule.
18072         * cs-parser.jay (declare_local_variables): Don't use
18073         AddChildVariableNames.
18074         (foreach_statement): Don't create an implicit block: 'foreach'
18075         introduces a scope.
18076
18077 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
18078
18079         * convert.cs (ImplicitNumericConversion): 0 is also positive when
18080         converting from 0L to ulong.  Fixes 57522.
18081
18082 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
18083
18084         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
18085         derived class hides via 'new' keyword field from base class (test-242.cs).
18086         TODO: Handle this in the more general way.
18087         
18088         * class.cs (CheckBase): Ditto.
18089
18090 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
18091
18092         * decl.cs (caching_flags): New member for storing cached values
18093         as bit flags.
18094         (MemberCore.Flags): New enum where bit flags for caching_flags
18095         are defined.
18096         (MemberCore.cls_compliance): Moved to caching_flags.
18097         (DeclSpace.Created): Moved to caching_flags.
18098
18099         * class.cs: Use caching_flags instead of DeclSpace.Created
18100         
18101 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
18102
18103         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
18104         if we are only a derived class, not a nested class.
18105
18106         * typemanager.cs: Same as above, but do this at the MemberLookup
18107         level (used by field and methods, properties are handled in
18108         PropertyExpr).   Allow for the qualified access if we are a nested
18109         method. 
18110
18111 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
18112
18113         * class.cs: Refactoring.
18114         (IMethodData): New inteface; Holds links to parent members
18115         to avoid member duplication (reduced memory allocation).
18116         (Method): Implemented IMethodData interface.
18117         (PropertyBase): New inner classes for get/set methods.
18118         (PropertyBase.PropertyMethod): Implemented IMethodData interface
18119         (Event): New inner classes for add/remove methods.
18120         (Event.DelegateMethod): Implemented IMethodData interface.
18121
18122         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
18123         EmitContext (related to class.cs refactoring).
18124
18125 2004-04-21  Raja R Harinath  <rharinath@novell.com>
18126
18127         * delegate.cs (Delegate.VerifyApplicability): If the number of
18128         arguments are the same as the number of parameters, first try to
18129         verify applicability ignoring  any 'params' modifier on the last
18130         parameter.
18131         Fixes #56442.
18132
18133 2004-04-16  Raja R Harinath  <rharinath@novell.com>
18134
18135         * class.cs (TypeContainer.AddIndexer): Use
18136         'ExplicitInterfaceName' to determine if interface name was
18137         explicitly specified.  'InterfaceType' is not initialized at this time.
18138         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
18139         Indexers array is already in the required order.  Initialize
18140         'IndexerName' only if there are normal indexers.
18141         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
18142         (TypeContainer.Emit): Emit DefaultMember attribute only if
18143         IndexerName is initialized.
18144         Fixes #56300.
18145
18146 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
18147
18148         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
18149         Fixes #57007
18150
18151 2004-04-15  Raja R Harinath  <rharinath@novell.com>
18152
18153         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
18154         attributes.
18155         Fix for #56456.
18156
18157         * attribute.cs (Attribute.Resolve): Check for duplicate named
18158         attributes.
18159         Fix for #56463.
18160
18161 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
18162
18163         * iterators.cs (MarkYield): track whether we are in an exception,
18164         and generate code accordingly.  Use a temporary value to store the
18165         result for our state.
18166
18167         I had ignored a bit the interaction of try/catch with iterators
18168         since their behavior was not entirely obvious, but now it is
18169         possible to verify that our behavior is the same as MS .NET 2.0
18170
18171         Fixes 54814
18172
18173 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
18174
18175         * iterators.cs: Avoid creating temporaries if there is no work to
18176         do. 
18177
18178         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
18179         Enumerations, use TypeManager.EnumToUnderlying and call
18180         recursively. 
18181
18182         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
18183         bug #57013
18184
18185         (This.Emit): Use EmitContext.EmitThis to emit our
18186         instance variable.
18187
18188         (This.EmitAssign): Ditto.
18189
18190         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
18191         codepaths, we will move all the functionality into
18192         Mono.CSharp.This 
18193
18194         (FieldExpr.EmitAssign): Ditto.
18195
18196         This fixes several hidden bugs that I uncovered while doing a code
18197         review of this today.
18198
18199         * codegen.cs (EmitThis): reworked so the semantics are more clear
18200         and also support value types "this" instances.
18201
18202         * iterators.cs: Changed so that for iterators in value types, we
18203         do not pass the value type as a parameter.  
18204
18205         Initialization of the enumerator helpers is now done in the caller
18206         instead of passing the parameters to the constructors and having
18207         the constructor set the fields.
18208
18209         The fields have now `assembly' visibility instead of private.
18210
18211 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
18212
18213         * expression.cs (Argument.Resolve): Check if fields passed as ref
18214         or out are contained in a MarshalByRefObject.
18215
18216         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
18217         another compiler type.
18218
18219 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
18220
18221         * class.cs (Indexer.Define): use the new name checking method.
18222         Also, return false on an error.
18223         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
18224         (is_identifier_[start/part]_character): make static.
18225
18226 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
18227
18228         * expression.cs (Binary.ResolveOperator): Do no append strings
18229         twice: since we can be invoked more than once (array evaluation)
18230         on the same concatenation, take care of this here.  Based on a fix
18231         from Ben (bug #56454)
18232
18233 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
18234
18235         * codegen.cs: Fix another case where CS1548 must be reported (when 
18236         delay-sign isn't specified and no private is available #56564). Fix
18237         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
18238         error when MCS is used on the MS runtime and we need to delay-sign 
18239         (which seems unsupported by AssemblyBuilder - see #56621).
18240
18241 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
18242
18243         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
18244         (TypeManager.ComputeNamespaces): Faster implementation for
18245         Microsoft runtime.
18246
18247         * compiler.csproj: Updated AssemblyName to mcs.
18248
18249 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
18250
18251         * rootcontext.cs: Add new types to the boot resolution.
18252
18253         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
18254         MulticastDelegate is not allowed.
18255
18256         * typemanager.cs: Add new types to lookup: System.TypedReference
18257         and ArgIterator.
18258
18259         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
18260         check for TypedReference or ArgIterator, they are not allowed. 
18261
18262         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
18263         makes us properly catch 1510 in some conditions (see bug 56016 for
18264         details). 
18265
18266 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
18267
18268         * CryptoConvert.cs: update from corlib version
18269         with endian fixes.
18270
18271 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
18272
18273         * class.cs (Indexer.Define): Check indexername declaration
18274
18275 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
18276
18277         * attribute.cs (IsClsCompliant): Fixed problem with handling
18278         all three states (compliant, not-compliant, undetected).
18279
18280 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
18281
18282         * attribute.cs (Attribute): Location is now public.
18283         (Resolve): Store resolved arguments (pos_values) in attribute class.
18284         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
18285         (GetClsCompliantAttributeValue): New method that gets
18286         CLSCompliantAttribute value.
18287         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
18288         if exists else null.
18289         (AttributeTester): New class for CLS-Compliant verification routines.
18290
18291         * class.cs (Emit): Add CLS-Compliant verification.
18292         (Method.GetSignatureForError): Implemented.
18293         (Constructor.GetSignatureForError): Implemented
18294         (Constructor.HasCompliantArgs): Returns if constructor has
18295         CLS-Compliant arguments.
18296         (Constructor.Emit): Override.
18297         (Construcor.IsIdentifierClsCompliant): New method; For constructors
18298         is needed to test only parameters.
18299         (FieldBase.GetSignatureForError): Implemented.
18300         (TypeContainer): New member for storing base interfaces.
18301         (TypeContainer.FindMembers): Search in base interfaces too.
18302
18303         * codegen.cs (GetClsComplianceAttribute): New method that gets
18304         assembly or module CLSCompliantAttribute value.
18305         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
18306         for assembly.
18307         (ModuleClass.Emit): Add error 3012 test.
18308
18309         * const.cs (Emit): Override and call base for CLS-Compliant tests.
18310
18311         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
18312         state for all decl types.
18313         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
18314         if CLS-Compliant tests are required.
18315         (IsClsCompliaceRequired): New method. Analyze whether code
18316         must be CLS-Compliant.
18317         (IsExposedFromAssembly): New method. Returns true when MemberCore
18318         is exposed from assembly.
18319         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
18320         value or gets cached value.
18321         (HasClsCompliantAttribute): New method. Returns true if MemberCore
18322         is explicitly marked with CLSCompliantAttribute.
18323         (IsIdentifierClsCompliant): New abstract method. This method is
18324         used to testing error 3005.
18325         (IsIdentifierAndParamClsCompliant): New method. Common helper method
18326         for identifier and parameters CLS-Compliant testing.
18327         (VerifyClsCompliance): New method. The main virtual method for
18328         CLS-Compliant verifications.
18329         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
18330         null. I don't know why is null (too many public members !).
18331         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
18332         and get value of first CLSCompliantAttribute that found.
18333
18334         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
18335         (VerifyClsCompliance): Override and add extra tests.
18336
18337         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
18338         clscheck- disable CLS-Compliant verification event if assembly is has
18339         CLSCompliantAttribute(true).
18340
18341         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
18342         ApllyAttribute is now called in emit section as in the other cases.
18343         Possible future Emit integration.
18344         (IsIdentifierClsCompliant): New override.
18345         (VerifyClsCompliance): New override.
18346         (GetEnumeratorName): Returns full enum name.
18347
18348         * parameter.cs (GetSignatureForError): Implemented.
18349
18350         * report.cs (WarningData): New struct for Warning message information.
18351         (LocationOfPreviousError): New method.
18352         (Warning): New method. Reports warning based on the warning table.
18353         (Error_T): New method. Reports error based on the error table.
18354
18355         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
18356         verifications are done here.
18357
18358         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
18359
18360         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
18361         CLSCompliantAttribute.
18362         (all_imported_types): New member holds all imported types from other
18363         assemblies.
18364         (LoadAllImportedTypes): New method fills static table with exported types
18365         from all referenced assemblies.
18366         (Modules): New property returns all assembly modules.
18367
18368 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
18369
18370         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
18371         throwing a parser error.
18372
18373         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
18374         which removes the hardcoded get_/set_ prefixes for properties, as
18375         IL allows for the properties to be named something else.  
18376
18377         Bug #56013
18378
18379         * expression.cs: Do not override operand before we know if it is
18380         non-null.  Fix 56207
18381
18382 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
18383
18384         * typemanager.cs: support for pinned variables.
18385
18386 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
18387
18388         * decl.cs, typemanager.cs: Avoid using an arraylist
18389         as a buffer if there is only one result set.
18390
18391 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
18392
18393         * expression.cs: Make sure you cant call a static method
18394         with an instance expression, bug #56174.
18395
18396 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
18397
18398         * class.cs (IsDuplicateImplementation): Improve error reporting to
18399         flag 663 (method only differs in parameter modifier).
18400
18401         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
18402         in preprocessor directives.
18403
18404         * location.cs (LookupFile): Allow for the empty path.
18405
18406         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
18407         better approach for some of that patch, but its failing with the
18408         CharSet enumeration.  For now try/catch will do.
18409
18410         * typemanager.cs: Do not crash if a struct does not have fields.
18411         Fixes 56150.
18412
18413 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
18414
18415         * expression.cs: cs0213, cant fix a fixed expression.
18416         fixes 50231.
18417
18418 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
18419
18420         * cs-parser.jay: detect invalid embeded statements gracefully.
18421         bug #51113.
18422
18423 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
18424
18425         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
18426         As a regex:
18427         s/
18428         the invocation type may not be a subclass of the tye of the item/
18429         The type of the item must be a subclass of the invocation item.
18430         /g
18431
18432         Fixes bug #50820.
18433
18434 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
18435
18436         * attribute.cs: Added methods to get a string and a bool from an
18437         attribute. Required to information from AssemblyKeyFileAttribute,
18438         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
18439         * codegen.cs: Modified AssemblyName creation to include support for
18440         strongnames. Catch additional exceptions to report them as CS1548.
18441         * compiler.csproj: Updated include CryptoConvert.cs.
18442         * compiler.csproj.user: Removed file - user specific configuration.
18443         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
18444         Mono.Security assembly. The original class is maintained and tested in
18445         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
18446         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
18447         like CSC 8.0 (C# v2) supports.
18448         * Makefile: Added CryptoConvert.cs to mcs sources.
18449         * rootcontext.cs: Added new options for strongnames.
18450
18451 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
18452
18453         * driver.cs: For --expect-error, report error code `2'
18454         if the program compiled with no errors, error code `1' if
18455         it compiled with an error other than the one expected.
18456
18457 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
18458
18459         * compiler.csproj: Updated for Visual Studio .NET 2003.
18460         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
18461         * compiler.sln: Updated for Visual Studio .NET 2003.
18462
18463 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
18464
18465         * expression.cs: Fix bug #47234. We basically need to apply the
18466         rule that we prefer the conversion of null to a reference type
18467         when faced with a conversion to 'object' (csc behaviour).
18468
18469 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
18470
18471         * statement.cs: Shorter form for foreach, eliminates
18472         a local variable. r=Martin.
18473
18474 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
18475
18476         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
18477         checks if we can use brtrue/brfalse to test for 0.
18478         * expression.cs: use the above in the test for using brtrue/brfalse.
18479         cleanup code a bit.
18480
18481 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
18482
18483         * expression.cs: Rewrite string concat stuff. Benefits:
18484
18485         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
18486         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
18487         rather than a concat chain.
18488
18489         * typemanager.cs: Add lookups for more concat overloads.
18490
18491 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
18492
18493         * expression.cs: Emit shorter il code for array init.
18494
18495         newarr
18496         dup
18497         // set 1
18498
18499         // set 2
18500
18501         newarr
18502         stloc.x
18503
18504         ldloc.x
18505         // set 1
18506
18507         ldloc.x
18508         // set 2
18509
18510 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
18511
18512         * statement.cs: Before, two switch blocks would be merged if the
18513         total size of the blocks (end_item - begin_item + 1) was less than
18514         two times the combined sizes of the blocks.
18515
18516         Now, it will only merge if after the merge at least half of the
18517         slots are filled.
18518
18519         fixes 55885.
18520
18521 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
18522
18523         * class.cs : csc build fix for GetMethods(). See bug #52503.
18524
18525 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
18526
18527         * expression.cs: Make sure fp comparisons work with NaN.
18528         This fixes bug #54303. Mig approved this patch a long
18529         time ago, but we were not able to test b/c the runtime
18530         had a related bug.
18531
18532 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
18533
18534         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
18535
18536 2004-03-19  Martin Baulig  <martin@ximian.com>
18537
18538         * class.cs (MemberCore.IsDuplicateImplementation): Report the
18539         error here and not in our caller.
18540
18541 2004-03-19  Martin Baulig  <martin@ximian.com>
18542
18543         * interface.cs: Completely killed this file.
18544         (Interface): We're now a TypeContainer and live in class.cs.
18545
18546         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
18547         argument; we're now also called for interfaces.
18548         (TypeContainer.DefineMembers): Allow this method being called
18549         multiple times.
18550         (TypeContainer.GetMethods): New public method; formerly known as
18551         Interface.GetMethod().  This is used by PendingImplementation.
18552         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
18553         it's now private and non-static.
18554         (Interface): Moved this here; it's now implemented similar to
18555         Class and Struct.
18556         (Method, Property, Event, Indexer): Added `bool is_interface'
18557         argument to their .ctor's.
18558         (MemberBase.IsInterface): New public field.
18559
18560         * cs-parser.jay: Create normal Method, Property, Event, Indexer
18561         instances instead of InterfaceMethod, InterfaceProperty, etc.
18562         (opt_interface_base): Removed; we now use `opt_class_base' instead.
18563         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
18564
18565 2004-03-19  Martin Baulig  <martin@ximian.com>
18566
18567         * class.cs (MethodCore.IsDuplicateImplementation): New private
18568         method which does the CS0111 checking.
18569         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
18570         Use IsDuplicateImplementation().
18571
18572 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
18573
18574         * decl.cs (FindMemberToOverride): New method to find the correct
18575         method or property to override in the base class.
18576         * class.cs
18577             - Make Method/Property use the above method to find the
18578               version in the base class.
18579             - Remove the InheritableMemberSignatureCompare as it is now
18580               dead code.
18581
18582         This patch makes large code bases much faster to compile, as it is
18583         O(n) rather than O(n^2) to do this validation.
18584
18585         Also, it fixes bug 52458 which is that nested classes are not
18586         taken into account when finding the base class member.
18587
18588         Reviewed/Approved by Martin.
18589
18590 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
18591
18592         * interface.cs: In all interface classes removed redundant
18593         member initialization.
18594
18595 2004-03-16  Martin Baulig  <martin@ximian.com>
18596
18597         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
18598
18599 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
18600
18601         * decl.cs (DefineTypeAndParents): New helper method to define a
18602         type's containers before the type itself is defined;  This is a
18603         bug exposed by the recent changes to Windows.Forms when an
18604         implemented interface was defined inside a class that had not been
18605         built yet.   
18606
18607         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
18608
18609         (Check): Loop correctly to report errors modifiers
18610         (UNSAFE was not in the loop, since it was the same as TOP).
18611
18612         * interface.cs: Every interface member now takes a ModFlags,
18613         instead of a "is_new" bool, which we set on the base MemberCore. 
18614
18615         Every place where we called "UnsafeOk" in the interface, now we
18616         call the proper member (InterfaceMethod.UnsafeOK) instead to get
18617         the unsafe settings from the member declaration instead of the
18618         container interface. 
18619
18620         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
18621
18622         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
18623         `set_indexer_name' to the pending bits (one per type).
18624
18625         We fixed a bug today that was picking the wrong method to
18626         override, since for properties the existing InterfaceMethod code
18627         basically ignored the method name.  Now we make sure that the
18628         method name is one of the valid indexer names.
18629
18630 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
18631  
18632         * support.cs (SeekableStreamReader): Keep track of stream byte
18633         positions and don't mix them with character offsets to the buffer.
18634
18635         Patch from Gustavo Giráldez
18636
18637 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
18638
18639         * interface.cs (InterfaceSetGetBase): Removed double member
18640         initialization, base class does it as well.
18641
18642 2004-03-13  Martin Baulig  <martin@ximian.com>
18643
18644         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
18645         when compiling corlib.
18646
18647 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
18648
18649         * convert.cs (ExplicitConversion): We were reporting an error on
18650         certain conversions (object_type source to a value type, when the
18651         expression was `null') before we had a chance to pass it through
18652         the user defined conversions.
18653
18654         * driver.cs: Replace / and \ in resource specifications to dots.
18655         Fixes 50752
18656
18657         * class.cs: Add check for duplicate operators.  Fixes 52477
18658
18659 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
18660
18661         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
18662         that are in the middle of the statements, not only at the end.
18663         Fixes #54987
18664
18665         * class.cs (TypeContainer.AddField): No longer set the
18666         `HaveStaticConstructor' flag, now we call it
18667         `UserDefineStaticConstructor' to diferentiate the slightly
18668         semantic difference.
18669
18670         The situation is that we were not adding BeforeFieldInit (from
18671         Modifiers.TypeAttr) to classes that could have it.
18672         BeforeFieldInit should be set to classes that have no static
18673         constructor. 
18674
18675         See:
18676
18677         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
18678
18679         And most importantly Zoltan's comment:
18680
18681         http://bugzilla.ximian.com/show_bug.cgi?id=44229
18682
18683         "I think beforefieldinit means 'it's ok to initialize the type sometime 
18684          before its static fields are used', i.e. initialization does not need
18685          to be triggered by the first access to the type. Setting this flag
18686          helps the JIT to compile better code, since it can run the static
18687          constructor at JIT time, and does not need to generate code to call it
18688          (possibly lots of times) at runtime. Unfortunately, mcs does not set
18689          this flag for lots of classes like String. 
18690          
18691          csc sets this flag if the type does not have an explicit static 
18692          constructor. The reasoning seems to be that if there are only static
18693          initalizers for a type, and no static constructor, then the programmer
18694          does not care when this initialization happens, so beforefieldinit
18695          can be used.
18696          
18697          This bug prevents the AOT compiler from being usable, since it 
18698          generates so many calls to mono_runtime_class_init that the AOT code
18699          is much slower than the JITted code. The JITted code is faster, 
18700          because it does not generate these calls if the vtable is type is
18701          already initialized, which is true in the majority of cases. But the
18702          AOT compiler can't do this."
18703
18704 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
18705
18706         * class.cs (MethodData.Emit): Refactor the code so symbolic
18707         information is generated for destructors;  For some reasons we
18708         were taking a code path that did not generate symbolic information
18709         before. 
18710
18711 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
18712
18713         * class.cs: Create a Constructor.CheckBase method that
18714         takes care of all validation type code. The method
18715         contains some code that was moved from Define.
18716
18717         It also includes new code that checks for duplicate ctors.
18718         This fixes bug #55148.
18719
18720 2004-03-09  Joshua Tauberer <tauberer@for.net>
18721
18722         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
18723         a { ... }-style array creation invokes EmitStaticInitializers
18724         which is not good for reference-type arrays.  String, decimal
18725         and now null constants (NullCast) are not counted toward
18726         static initializers.
18727
18728 2004-03-05  Martin Baulig  <martin@ximian.com>
18729
18730         * location.cs (SourceFile.HasLineDirective): New public field;
18731         specifies whether the file contains or is referenced by a "#line"
18732         directive.
18733         (Location.DefineSymbolDocuments): Ignore source files which
18734         either contain or are referenced by a "#line" directive.        
18735
18736 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
18737
18738         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
18739         direct access to our parent, so check the method inline there.
18740
18741 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
18742
18743         * expression.cs (Invocation.EmitCall): Miguel's last commit
18744         caused a regression. If you had:
18745
18746             T t = null;
18747             t.Foo ();
18748
18749         In Foo the implict this would be null.
18750
18751 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
18752
18753         * expression.cs (Invocation.EmitCall): If the method is not
18754         virtual, do not emit a CallVirt to it, use Call.
18755
18756         * typemanager.cs (GetFullNameSignature): Improve the method to
18757         cope with ".ctor" and replace it with the type name.
18758
18759         * class.cs (ConstructorInitializer.Resolve): Now the method takes
18760         as an argument the ConstructorBuilder where it is being defined,
18761         to catch the recursive constructor invocations.
18762
18763 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
18764
18765         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
18766         routines to check if a type is an enumerable/enumerator allow
18767         classes that implement the IEnumerable or IEnumerator interfaces.
18768
18769         * class.cs (Property, Operator): Implement IIteratorContainer, and
18770         implement SetYields.
18771
18772         (Property.Define): Do the block swapping for get_methods in the
18773         context of iterators.   We need to check if Properties also
18774         include indexers or not.
18775
18776         (Operator): Assign the Block before invoking the
18777         OperatorMethod.Define, so we can trigger the Iterator code
18778         replacement. 
18779
18780         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
18781         Property and Operator classes are not created when we parse the
18782         declarator but until we have the block completed, so we use a
18783         singleton SimpleIteratorContainer.Simple to flag whether the
18784         SetYields has been invoked.
18785
18786         We propagate this setting then to the Property or the Operator to
18787         allow the `yield' to function.
18788
18789 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
18790
18791         * codegen.cs: Implemented attribute support for modules.
18792         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
18793         Assembly/Module functionality.
18794
18795         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
18796         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
18797         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
18798
18799 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
18800
18801         * interface.cs (FindMembers): The operation is performed on all base
18802         interfaces and not only on the first. It is required for future CLS Compliance patch.
18803
18804 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
18805
18806         * statement.cs, codegen.cs:
18807         This patch deals with patterns such as:
18808
18809         public class List : IEnumerable {
18810
18811                 public MyEnumerator GetEnumerator () {
18812                         return new MyEnumerator(this);
18813                 }
18814
18815                 IEnumerator IEnumerable.GetEnumerator () {
18816                         ...
18817                 }
18818                 
18819                 public struct MyEnumerator : IEnumerator {
18820                         ...
18821                 }
18822         }
18823
18824         Before, there were a few things we did wrong:
18825         1) we would emit callvirt on a struct, which is illegal
18826         2) we emited ldarg when we needed to emit ldarga
18827         3) we would mistakenly call the interface methods on an enumerator
18828         type that derived from IEnumerator and was in another assembly. For example:
18829
18830         public class MyEnumerator : IEnumerator
18831
18832         Would have the interface methods called, even if there were public impls of the
18833         method. In a struct, this lead to invalid IL code.
18834
18835 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
18836
18837         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
18838           renamed to Emit.
18839
18840         * delegate.cs (Define): Fixed crash when delegate type is undefined.
18841
18842 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
18843
18844         * cs-parser.jay: Fix small regression: we were not testing V2
18845         compiler features correctly.
18846
18847         * interface.cs: If the emit context is null, then create one
18848
18849 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
18850
18851         * decl.cs (GetSignatureForError): New virtual method to get full name
18852           for error messages.
18853
18854         * attribute.cs (IAttributeSupport): New interface for attribute setting.
18855           Now it is possible to rewrite ApplyAttributes method to be less if/else.
18856
18857         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
18858           Duplicated members and code in these classes has been removed.
18859           Better encapsulation in these classes.
18860
18861 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
18862
18863         * assign.cs (Assign.DoResolve): When dealing with compound
18864         assignments, there is a new rule in ECMA C# 2.4 (might have been
18865         there before, but it is documented here) that states that in:
18866
18867         a op= b;
18868
18869         If b is of type int, and the `op' is a shift-operator, then the
18870         above is evaluated as:
18871
18872         a = (int) a op b 
18873
18874         * expression.cs (Binary.ResolveOperator): Instead of testing for
18875         int/uint/long/ulong, try to implicitly convert to any of those
18876         types and use that in pointer arithmetic.
18877
18878         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
18879         method to print information for from the type, not from the
18880         null-method we were given.
18881
18882 2004-02-01  Duncan Mak  <duncan@ximian.com>
18883
18884         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
18885         parsing for cmd, fixes bug #53694.
18886
18887 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
18888
18889         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
18890         in the member name duplication tests. Property and operator name duplication
18891         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
18892
18893 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
18894
18895         * interface.cs (PopulateMethod): Fixed crash when interface method
18896         returns not existing type (error test cs0246-3.cs).
18897
18898 2004-02-02  Ravi Pratap M <ravi@ximian.com>
18899
18900         * cs-parser.jay (interface_accessors): Re-write actions to also
18901         store attributes attached to get and set methods. Fix spelling
18902         while at it.
18903
18904         (inteface_property_declaration): Modify accordingly.
18905
18906         (InterfaceAccessorInfo): New helper class to store information to pass
18907         around between rules that use interface_accessors.
18908
18909         * interface.cs (Emit): Apply attributes on the get and set
18910         accessors of properties and indexers too.
18911
18912         * attribute.cs (ApplyAttributes): Modify accordingly to use the
18913         right MethodBuilder when applying attributes to the get and set accessors.
18914
18915 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
18916
18917         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
18918
18919 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
18920
18921         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
18922
18923 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
18924
18925         * cs-parser.jay: Remove YIELD token, instead use the new grammar
18926         changes that treat `yield' specially when present before `break'
18927         or `return' tokens.
18928
18929         * cs-tokenizer.cs: yield is no longer a keyword.
18930
18931 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
18932
18933         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
18934         setting for default constructors.
18935         For default constructors are almost every time set wrong Modifier. The
18936         generated IL code has been alright. But inside mcs this values was
18937         wrong and this was reason why several of my CLS Compliance tests
18938         failed.
18939
18940 2004-01-22  Martin Baulig  <martin@ximian.com>
18941
18942         * cs-parser.jay (namespace_or_type_name): Return an Expression,
18943         not a QualifiedIdentifier.  This is what `type_name_expression'
18944         was previously doing.
18945         (type_name_expression): Removed; the code is now in
18946         `namespace_or_type_name'.
18947         (qualified_identifier): Removed, use `namespace_or_type_name'
18948         instead.
18949         (QualifiedIdentifier): Removed this class.      
18950
18951 2004-01-22  Martin Baulig  <martin@ximian.com>
18952
18953         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
18954         not a string as alias name.
18955
18956 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
18957
18958         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
18959         #52730 bug, and instead compute correctly the need to use a
18960         temporary variable when requesting an address based on the
18961         static/instace modified of the field and the constructor.
18962  
18963 2004-01-21  Martin Baulig  <martin@ximian.com>
18964
18965         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
18966         class and namespace before looking up aliases.  Fixes #52517.
18967
18968 2004-01-21  Martin Baulig  <martin@ximian.com>
18969
18970         * flowanalysis.cs (UsageVector.Merge): Allow variables being
18971         assinged in a 'try'; fixes exception4.cs.
18972
18973 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
18974         * class.cs : Implemented parameter-less constructor for TypeContainer
18975
18976         * decl.cs: Attributes are now stored here. New property OptAttributes
18977
18978         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
18979
18980         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
18981
18982 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
18983
18984         * typemanager.cs (CSharpSignature): Now reports also inner class name.
18985           (CSharpSignature): New method for indexer and property signature.
18986
18987 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
18988
18989         * pending.cs (IsVirtualFilter): Faster implementation.
18990
18991 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
18992
18993         * typemanager.cs: Avoid inclusion of same assembly more than once.
18994
18995 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
18996
18997         * cs-parser.jay: Fixed problem where the last assembly attribute
18998           has been applied also to following declaration (class, struct, etc.)
18999           
19000 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19001
19002         * class.cs: Added error CS0538, CS0539 reporting.
19003         Fixed crash on Microsoft runtime when field type is void.
19004
19005         * cs-parser.jay: Added error CS0537 reporting.
19006
19007         * pending.cs: Added error CS0535 reporting.
19008         Improved error report for errors CS0536, CS0534.
19009
19010 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
19011
19012         Merge a few bits from the Anonymous Method MCS tree.
19013
19014         * statement.cs (ToplevelBlock): New class for toplevel methods,
19015         will hold anonymous methods, lifted variables.
19016
19017         * cs-parser.jay: Create toplevel blocks for delegates and for
19018         regular blocks of code. 
19019
19020 2004-01-20  Martin Baulig  <martin@ximian.com>
19021
19022         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
19023         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
19024         and `NeedExplicitReturn'; added `IsLastStatement'.
19025         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
19026         have a `ReturnLabel' or we're not unreachable.
19027
19028         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
19029         child's reachability; don't just override ours with it.  Fixes
19030         #58058 (lluis's example).
19031         (FlowBranching): Added public InTryOrCatch(), InCatch(),
19032         InFinally(), InLoop(), InSwitch() and
19033         BreakCrossesTryCatchBoundary() methods.
19034
19035         * statement.cs (Return): Do all error checking in Resolve().
19036         Unless we are the last statement in a top-level block, always
19037         create a return label and jump to it.
19038         (Break, Continue): Do all error checking in Resolve(); also make
19039         sure we aren't leaving a `finally'.
19040         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
19041         statement in a top-level block.
19042         (Block.Flags): Added `IsDestructor'.
19043         (Block.IsDestructor): New public property.
19044
19045 2004-01-20  Martin Baulig  <martin@ximian.com>
19046
19047         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
19048
19049 2004-01-20  Martin Baulig  <martin@ximian.com>
19050
19051         * statement.cs (Statement.ResolveUnreachable): New public method.
19052         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
19053         (Block.Resolve): Resolve unreachable statements.
19054
19055 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
19056
19057         * expression.cs: We need to fix the case where we do
19058         not have a temp variable here.
19059
19060         * assign.cs: Only expression compound assignments need
19061         temporary variables.
19062
19063 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
19064
19065         * flowanalysis.cs: Reduce memory allocation in a few ways:
19066           - A block with no variables should not allocate a bit
19067             vector for itself.
19068           - A method with no out parameters does not need any tracking
19069             for assignment of the parameters, so we need not allocate
19070             any data for it.
19071           - The arrays:
19072                 public readonly Type[] VariableTypes;
19073                 public readonly string[] VariableNames;
19074             Are redundant. The data is already stored in the variable
19075             map, so we need not allocate another array for it.
19076           - We need to add alot of checks for if (params | locals) == null
19077             due to the first two changes.
19078
19079 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
19080
19081         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
19082         implement IMemoryLocation, we store a copy on a local variable and
19083         take the address of it.  Patch from Benjamin Jemlich
19084
19085         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
19086         to use a special "type_name_expression" rule which reduces the
19087         number of "QualifiedIdentifier" classes created, and instead
19088         directly creates MemberAccess expressions.
19089
19090 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
19091
19092         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
19093         that fixes #52853.  Null literal assignment to ValueType
19094
19095         * class.cs (MethodData.Emit): Instead of checking the name of the
19096         method to determine if its a destructor, create a new derived
19097         class from Method called Destructor, and test for that.  
19098
19099         * cs-parser.jay: Create a Destructor object instead of a Method.  
19100
19101         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
19102
19103         Fixes: 52933
19104
19105 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
19106
19107         * expression.cs (Binary.ResolveOperator): Perform an implicit
19108         conversion from MethodGroups to their delegate types on the
19109         Addition operation.
19110
19111         * delegate.cs: Introduce a new class DelegateCreation that is the
19112         base class for `NewDelegate' and `ImplicitDelegateCreation',
19113         factor some code in here.
19114
19115         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
19116         conversion from MethodGroups to compatible delegate types. 
19117
19118         * ecore.cs (Expression.Resolve): Do not flag error 654
19119         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
19120         we allow conversions from MethodGroups to delegate types now.
19121
19122         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
19123         assignments in v2 either.
19124
19125 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
19126
19127         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
19128         static read-only fields in ctors.
19129
19130         Applied patch from Benjamin Jemlich 
19131
19132         * expression.cs (UnaryMutator): Avoid leaking local variables. 
19133
19134 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
19135
19136         * cs-tokenizer.cs (IsCastToken): Allow the various native types
19137         here to return true, as they can be used like this:
19138
19139                 (XXX) int.MEMBER ()
19140
19141         Fixed 49836 and all the other dups
19142
19143 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
19144
19145         * driver.cs: Implement /win32res and /win32icon.
19146
19147 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
19148
19149         * cs-parser.jay: Add a rule to improve error handling for the
19150         common mistake of placing modifiers after the type.
19151
19152 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
19153
19154         * cs-parser.jay (interface_event_declaration): Catch
19155         initialization of events on interfaces, and report cs0068
19156
19157         * cs-parser.jay (interface_event_declaration): Catch
19158         initialization of events. 
19159
19160         * ecore.cs: Better report missing constructors.
19161
19162         * expression.cs (Binary.ResolveOperator): My previous bug fix had
19163         the error reporting done in the wrong place.  Fix.
19164
19165         * expression.cs (Binary.ResolveOperator): Catch the 
19166         operator + (E x, E y) error earlier, and later allow for implicit
19167         conversions in operator +/- (E e, U x) from U to the underlying
19168         type of E.
19169
19170         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
19171         52596, if the container class is abstract, the default constructor
19172         is protected otherwise its public (before, we were always public).
19173
19174         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
19175         fixed statement.
19176
19177         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
19178         Jemlich that fixes bug #52597, MCS was generating invalid code for
19179         idisposable structs.   Thanks to Ben for following up with this
19180         bug as well.
19181
19182 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
19183
19184         * driver.cs: Allow assemblies without code to be generated, fixes
19185         52230.
19186
19187 2004-01-07  Nick Drochak <ndrochak@gol.com>
19188
19189         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
19190
19191 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
19192
19193         * cs-parser.jay: Add rules to improve error reporting if fields or
19194         methods are declared at the namespace level (error 116)
19195
19196         * Add rules to catch event add/remove
19197
19198 2004-01-04  David Sheldon <dave-mono@earth.li>
19199
19200   * expression.cs: Added matching ")" to error message for 
19201   CS0077
19202
19203 2004-01-03 Todd Berman <tberman@gentoo.org>
19204
19205         * ecore.cs, attribute.cs:
19206         Applying fix from #52429.
19207
19208 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19209
19210         * ecore.cs, expression.cs, statement.cs:
19211         Total rewrite of how we handle branching. We
19212         now handle complex boolean expressions with fewer
19213         jumps. As well if (x == 0) no longer emits a ceq.
19214
19215         if (x is Foo) is much faster now, because we generate
19216         better code.
19217
19218         Overall, we get a pretty big improvement on our benchmark
19219         tests. The code we generate is smaller and more readable.
19220
19221         I did a full two-stage bootstrap. The patch was reviewed
19222         by Martin and Miguel.
19223
19224 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19225
19226         * cs-parser.jay: Make primary_expression not take a QI.
19227         we dont need this because the member_access rule covers
19228         us here. So we replace the rule with just IDENTIFIER.
19229
19230         This has two good effects. First, we remove a s/r conflict.
19231         Second, we allocate many fewer QualifiedIdentifier objects.
19232
19233 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19234
19235         * attribute.cs: Handle MarshalAs attributes as pseudo, and
19236         set the correct information via SRE. This prevents
19237         hanging on the MS runtime. Fixes #29374.
19238
19239 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19240
19241         * convert.cs: correctly handle conversions to value types
19242         from Enum and ValueType as unboxing conversions.
19243
19244         Fixes bug #52569. Patch by Benjamin Jemlich.
19245
19246 2004-01-02  Ravi Pratap  <ravi@ximian.com>
19247
19248         * expression.cs (BetterConversion): Prefer int -> uint
19249         over int -> ulong (csc's behaviour). This fixed bug #52046.
19250
19251 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
19252
19253         * decl.cs (MemberCache.FindMembers): now returns a
19254         MemberInfo [].
19255
19256         * typemanager.cs: In general, go with with ^^.
19257         (CopyNewMethods): take an IList.
19258         (RealMemberLookup): Only allocate an arraylist
19259         if we copy from two sets of methods.
19260
19261         This change basically does two things:
19262         1) Fewer array lists allocated due to CopyNewMethods.
19263         2) the explicit cast in MemberList costed ALOT.
19264
19265 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
19266
19267         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
19268         a hashtable to avoid needless string allocations when an identifier is
19269         used more than once (the common case).
19270
19271 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
19272
19273         * pending.cs: MS's TypeBuilder.GetInterfaces ()
19274         is broken, it will not return anything. So, we
19275         have to use the information we have in mcs to
19276         do the task.
19277
19278         * typemanager.cs: Add a cache for GetInterfaces,
19279         since this will now be used more often (due to ^^)
19280
19281         (GetExplicitInterfaces) New method that gets the
19282         declared, not effective, interfaces on a type
19283         builder (eg, if you have interface IFoo, interface
19284         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
19285         { IBar }.
19286
19287         This patch makes MCS able to bootstrap itself on
19288         Windows again.
19289
19290 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
19291
19292         * expression.cs: Remove the Nop's that Miguel put
19293         in by mistake.
19294
19295 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
19296
19297         * report.cs, codegen.cs: Give the real stack trace to
19298         the error when an exception is thrown.
19299
19300 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
19301
19302         * decl.cs: only allocate hashtables for ifaces if 
19303         it is an iface!
19304
19305 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
19306
19307         * expression.cs: fix the error from cs0121-2.cs
19308         (a parent interface has two child interfaces that
19309         have a function with the same name and 0 params
19310         and the function is called through the parent).
19311
19312 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
19313
19314         * class.cs, rootcontext.cs, typmanager.cs: do not
19315         leak pointers.
19316
19317 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19318
19319         * codegen.cs: remove stack for the ec flow branching.
19320         It is already a linked list, so no need.
19321
19322 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
19323
19324         * Makefile: Allow custom profiler here.
19325
19326 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
19327
19328         * typemanager.cs (LookupType):
19329           - Use a static char [], because split takes
19330             a param array for args, so it was allocating
19331             every time.
19332           - Do not store true in a hashtable, it boxes.
19333
19334 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
19335
19336         * flowanalysis.cs: bytify common enums.
19337
19338 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
19339
19340         * modifiers.cs: Add a new set of flags for the
19341         flags allowed on explicit interface impls.
19342         * cs-parser.jay: catch the use of modifiers in
19343         interfaces correctly.
19344         * class.cs: catch private void IFoo.Blah ().
19345
19346         All related to bug #50572.
19347
19348 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
19349
19350         * decl.cs: Rewrite the consistant accessability checking.
19351         Accessability is not linear, it must be implemented in
19352         a tableish way. Fixes #49704.
19353
19354 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
19355
19356         * expression.cs: Handle negation in a checked context.
19357         We must use subtraction from zero. Fixes #38674.
19358
19359 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19360
19361         * class.cs: Ignore static void main in DLLs.
19362         * rootcontext.cs: Handle the target type here,
19363         since we are have to access it from class.cs
19364         * driver.cs: account for the above.
19365
19366 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19367
19368         * report.cs: Give line numbers and files if available.
19369
19370 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
19371
19372         * driver.cs: Implement /addmodule.
19373
19374         * typemanager.cs:  Change 'modules' field so it now contains Modules not
19375         ModuleBuilders.
19376
19377 2003-12-20  Martin Baulig  <martin@ximian.com>
19378
19379         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
19380         (FieldBase.IsAssigned): Removed this field.
19381         (FieldBase.SetAssigned): New public method.
19382         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
19383
19384 2003-12-20  Martin Baulig  <martin@ximian.com>
19385
19386         * expression.cs (LocalVariableReference.DoResolve): Don't set
19387         `vi.Used' if we're called from DoResolveLValue().
19388
19389         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
19390         returns the usage vector it just merged into the current one -
19391         pass this one to UsageWarning().
19392         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
19393         of the `EmitContext', don't call this recursively on our children.
19394
19395 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
19396
19397         * driver.cs: Implement /target:module.
19398
19399 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
19400
19401         * support.cs (CharArrayHashtable): New helper class.
19402
19403         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
19404         char arrays, not strings, so we can avoid creating a string in
19405         consume_identifier if the identifier is a keyword.
19406
19407 2003-12-16  Martin Baulig  <martin@ximian.com>
19408
19409         * statement.cs (LocalInfo.Assigned): Removed this property.
19410         (LocalInfo.Flags): Removed `Assigned'.
19411         (LocalInfo.IsAssigned): New public method; takes the EmitContext
19412         and uses flow analysis.
19413         (Block.UsageWarning): Made this method private.
19414         (Block.Resolve): Call UsageWarning() if appropriate.
19415
19416         * expression.cs (LocalVariableReference.DoResolve): Always set
19417         LocalInfo.Used here.
19418
19419 2003-12-13  Martin Baulig  <martin@ximian.com>
19420
19421         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
19422         any value here; we're now using flow analysis to figure out
19423         whether a statement/block returns a value.
19424
19425 2003-12-13  Martin Baulig  <martin@ximian.com>
19426
19427         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
19428         working again.
19429         (FlowBranching.MergeFinally): Don't call
19430         `branching.CheckOutParameters()' here, this is called in
19431         MergeTopBlock().
19432         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
19433         when adding the `finally' vector.       
19434
19435 2003-12-13  Martin Baulig  <martin@ximian.com>
19436
19437         * flowanalysis.cs
19438         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
19439         actually work and also fix #48962.
19440
19441 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
19442
19443         * decl.cs: Do not check System.Object for nested types,
19444         since we know it does not have any. Big bang for buck:
19445
19446         BEFORE:
19447            Run 1:   8.35 seconds
19448            Run 2:   8.32 seconds
19449            corlib:  17.99 seconds
19450         AFTER:
19451            Run 1:   8.17 seconds
19452            Run 2:   8.17 seconds
19453            corlib:  17.39 seconds
19454
19455 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
19456
19457         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
19458         time we are returning 0 members, so we save alot here.
19459
19460 2003-12-11  Martin Baulig  <martin@ximian.com>
19461
19462         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
19463         `MergeChild()', also just take the `FlowBranching' as argument;
19464         call Merge() on it and return the result.
19465         (FlowBranching.Merge): We don't need to do anything if we just
19466         have one sibling.
19467
19468 2003-12-11  Martin Baulig  <martin@ximian.com>
19469
19470         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
19471         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
19472         Maurer for this idea.
19473
19474 2003-12-11  Martin Baulig  <martin@ximian.com>
19475
19476         * flowanalysis.cs (MergeResult): This class is now gone; we now
19477         use the `UsageVector' for this.  The reason for this is that if a
19478         branching just has one sibling, we don't need to "merge" them at
19479         all - that's the next step to do.
19480         (FlowBranching.Merge): We now return a `UsageVector' instead of a
19481         `MergeResult'.
19482
19483 2003-12-11  Martin Baulig  <martin@ximian.com>
19484
19485         Reworked flow analyis and made it more precise and bug-free.  The
19486         most important change is that we're now using a special `Reachability'
19487         class instead of having "magic" meanings of `FlowReturns'.  I'll
19488         do some more cleanups and optimizations and also add some more
19489         documentation this week.
19490
19491         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
19492         largely reworked this class.
19493         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
19494         the new `Reachability' class instead of having "magic" values here.
19495         (FlowBranching): We're now using an instance of `Reachability'
19496         instead of having separate `Returns', `Breaks' etc. fields.
19497
19498         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
19499         based on flow analysis; ignore the return value of block.Emit ().
19500
19501 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
19502
19503         * driver.cs typemanager.cs: Find the mono extensions to corlib even
19504         if they are private.
19505
19506 2003-12-09  Martin Baulig  <martin@ximian.com>
19507
19508         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
19509         call them directly on the UsageVector.
19510
19511 2003-12-09  Martin Baulig  <martin@ximian.com>
19512
19513         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
19514         Changed return type from `FlowReturns' to `Reachability'.
19515
19516 2003-12-09  Martin Baulig  <martin@ximian.com>
19517
19518         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
19519         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
19520         `Reachable' fields with a single `Reachability' one.
19521
19522 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
19523
19524         * class.cs (FindMembers): Remove foreach's.
19525
19526         Bootstrap times:
19527
19528         BEFORE
19529                 Run 1:   8.74 seconds
19530                 Run 2:   8.71 seconds
19531
19532         AFTER
19533                 Run 1:   8.64 seconds
19534                 Run 2:   8.58 seconds
19535
19536
19537 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
19538
19539         * cs-parser.jay:
19540         * gen-treedump.cs:
19541         * statement.cs:
19542         This patch does a few things:
19543                 1. EmptyStatement is now a singleton, so it is never reallocated.
19544                 2. All blah is EmptyStatement constructs have been changed to
19545                    blah == EmptyStatement.Value, which is much faster and valid
19546                    now that EmptyStatement is a singleton.
19547                 3. When resolving a block, rather than allocating a new array for
19548                    the non-empty statements, empty statements are replaced with
19549                    EmptyStatement.Value
19550                 4. Some recursive functions have been made non-recursive.
19551         Mainly the performance impact is from (3), however (1) and (2) are needed for
19552         this to work. (4) does not make a big difference in normal situations, however
19553         it makes the profile look saner.
19554
19555         Bootstrap times:
19556
19557         BEFORE
19558         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
19559         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
19560         Total memory allocated: 56397 KB
19561
19562         AFTER
19563         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
19564         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
19565         Total memory allocated: 55666 KB
19566
19567 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
19568
19569         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
19570         than the hashtable in a hashtable version
19571
19572         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
19573         we always end up concating a string. This results in a huge perf
19574         loss, because many strings have to be tracked by the GC. In this
19575         patch, we first use a hashtable that works with two keys, so that
19576         the strings do not need to be concat'ed.
19577
19578         Bootstrap times:
19579         BEFORE
19580                 Run 1:   8.74 seconds
19581                 Run 2:   8.71 seconds
19582
19583         AFTER
19584                 Run 1:   8.65 seconds
19585                 Run 2:   8.56 seconds
19586
19587 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
19588
19589         * Makefile: Add a new target `do-time' that does a quick and simple
19590         profile, leaving easy to parse output.
19591
19592 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
19593
19594         * codegen.cs (Init): Create the dynamic assembly with 
19595         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
19596
19597 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
19598
19599         * support.cs: Make the PtrHashtable use only one
19600         instance of its comparer.
19601
19602 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
19603
19604         * typemanager.cs: Fix lookup of GetNamespaces.
19605
19606 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
19607
19608         * expression.cs: Removed redundant line.
19609
19610         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
19611         ArrayLists, use for loops with bounds.  
19612
19613         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
19614         arraylist.
19615
19616         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
19617         arraylists, use for loop with bounds.
19618
19619         The above three changes give us a 0.071 second performance
19620         improvement out of 3.294 seconds down to 3.223.  On my machine
19621         the above changes reduced the memory usage by 1,387 KB during
19622         compiler bootstrap.
19623
19624         * cs-parser.jay (QualifiedIdentifier): New class used to represent
19625         QualifiedIdentifiers.  Before we created a new string through
19626         concatenation, and mostly later on, the result would be
19627         manipulated by DecomposeQI through string manipulation.
19628
19629         This reduced the compiler memory usage for bootstrapping from
19630         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
19631         compile times in 0.05 seconds.
19632
19633 2003-11-28  Dick Porter  <dick@ximian.com>
19634
19635         * support.cs: Do string compares with the Invariant culture.
19636
19637         * rootcontext.cs: 
19638         * gen-treedump.cs: 
19639         * expression.cs: 
19640         * driver.cs: 
19641         * decl.cs: 
19642         * codegen.cs: 
19643         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
19644         the comparison is done with the Invariant culture.
19645
19646 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
19647
19648         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
19649         GetEnumerator method.
19650
19651         (ProbeCollectionType): Iterate starting at the most specific type
19652         upwards looking for a GetEnumerator
19653
19654         * expression.cs: Shift count can be up to 31 for int/uint and 63
19655         for long/ulong.
19656
19657 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
19658
19659         * statement.cs (Block.LookupLabel): Also look for the label on the
19660         children blocks.  Use a hash table to keep track of visited
19661         nodes. 
19662
19663         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
19664         we actually did transform the other operand, otherwise fall back
19665         to the common codepath that casts to long.
19666
19667         * cs-tokenizer.cs: Use the same code pattern as the int case.
19668         Maybe I should do the parsing myself, and avoid depending on the
19669         Parse routines to get this done.
19670
19671 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
19672
19673         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
19674         which fixes bug 51347.  This time test it.
19675
19676         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
19677         attributes for example can not tell the difference between these.
19678         The difference was only a syntax feature of the language. 
19679
19680         * attribute.cs: Apply attributes to delegates.
19681
19682         * delegate.cs: Call the apply attributes method.
19683
19684 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
19685
19686         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
19687         comparing 0 vs Byte.MinValue, not the value
19688
19689         (ImplicitConversionRequired): When reporting a conversion error,
19690         use error 31 to print out the constant error instead of the
19691         simpler 29.
19692
19693         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
19694         which fixes bug 51347.
19695
19696 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
19697
19698         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
19699         which fixes the -warnaserror command line option.
19700
19701 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
19702
19703         * cfold.cs (DoNumericPromotions): During constant folding of
19704         additions on UIntConstant, special case intconstants with
19705         IntConstants like we do on the expression binary operator. 
19706
19707 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
19708
19709         * convert.cs (ImplicitReferenceConversion): We were missing a case
19710         (System.Enum are not value types or class types, so we need to
19711         classify them separatedly).
19712
19713         * driver.cs: We do not support error 2007.
19714
19715 2003-11-12 Jackson Harper <jackson@ximian.com>
19716
19717         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
19718         system directory. Also use the full file name so users can
19719         libraries names mscorlib-o-tron.dll in a non system dir.
19720
19721 2003-11-10  Martin Baulig  <martin@ximian.com>
19722
19723         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
19724         (TypeManager.InitCoreTypes): Initialize them here, but instead of
19725         calling `ResolveType()' on them, directly assign their `Type'.
19726
19727 2003-11-08  Martin Baulig  <martin@ximian.com>
19728
19729         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
19730         return value and the `out parent' parameter.
19731         (TypeContainer.DefineType): Moved the CS0644 check into
19732         GetClassBases().  Don't pass the interface types to the
19733         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
19734         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
19735
19736         * ecore.cs (TypeExpr.IsAttribute): New property.
19737         (TypeExpr.GetInterfaces): New method.
19738
19739         * interface.cs (Interface.GetInterfaceTypeByName): Return a
19740         TypeExpr instead of a Type.
19741         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
19742         (Interface.DefineType): Don't pass the interface types to the
19743         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
19744         them later and then call `TypeBulider.AddInterfaceImplementation()'.
19745
19746         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
19747         instead of a `Type[]'.
19748         (TypeManager.RegisterBuilder): Likewise.
19749         (TypeManager.AddUserInterface): Likewise.
19750         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
19751         `Type[]' and also return a `TypeExpr[]'.
19752         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
19753
19754 2003-11-08  Martin Baulig  <martin@ximian.com>
19755
19756         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
19757         Expression.     
19758
19759 2003-11-08  Martin Baulig  <martin@ximian.com>
19760
19761         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
19762         TypeManager.ResolveExpressionTypes().
19763
19764         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
19765         instead of an Expression.
19766         (TypeExpr): This is now an abstract base class for `TypeExpression'.
19767         (TypeExpression): New public class; formerly known as `TypeExpr'.
19768
19769         * expression.cs (ComposedCast): Derive from TypeExpr.
19770
19771         * typemanager.cs (TypeManager.system_*_expr): These are now
19772         TypExpr's instead of Expression's.
19773         (TypeManager.ResolveExpressionTypes): New public static function;
19774         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
19775         of them.        
19776
19777 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
19778
19779         * expression.cs (New.DoResolve): Do not dereference value that
19780         might be a null return.
19781
19782         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
19783         sure that the constant value has the right type.  Fixes an
19784         unreported bug, similar to 50425.
19785
19786         * const.cs (Const.LookupConstantValue): Call
19787         ImplicitStandardConversionExists before doing a conversion to
19788         avoid havng the TypeManager.ChangeType do conversions.
19789
19790         Reduced the number of casts used
19791
19792         (Const.ChangeType): New routine to enable reuse of the constant
19793         type changing code from statement.
19794
19795         * typemanager.cs (ChangeType): Move common initialization to
19796         static global variables.
19797
19798         Fixes #50425.
19799
19800         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
19801         every value type to go through, even if it was void.  Fix that. 
19802
19803         * cs-tokenizer.cs: Use is_identifier_start_character on the start
19804         character of the define, and the is_identifier_part_character for
19805         the rest of the string.
19806
19807 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
19808
19809         * expression.cs (UnaryMutator.EmitCode): When I updated
19810         LocalVariableReference.DoResolve, I overdid it, and dropped an
19811         optimization done on local variable references.
19812
19813 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
19814
19815         * ecore.cs: Convert the return from Ldlen into an int.
19816
19817 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
19818
19819         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
19820         the accessibility, this is a special case for toplevel non-public
19821         classes (internal for instance).
19822
19823 2003-10-20  Nick Drochak <ndrochak@gol.com>
19824
19825         * ecore.cs: Fix typo and build.  Needed another right paren.
19826
19827 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
19828
19829         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
19830         `internal' case regular and protected, but not allowing protected
19831         to be evaluated later.  Bug 49840
19832
19833 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
19834
19835         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
19836         to kb.Nlast, and not the kb.nFirst to isolate the switch
19837         statement.
19838
19839         Extract the underlying type, so enumerations of long/ulong are
19840         treated like long/ulong.
19841
19842 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
19843
19844         * expression.cs (New): Overload the meaning of RequestedType to
19845         track the possible creation of the NewDelegate type, since
19846         DoResolve is invoked more than once for new constructors on field
19847         initialization.
19848
19849         See bugs: #48800 and #37014
19850
19851         * cs-parser.jay (declare_local_constants): Take an arraylist
19852         instead of a single constant.
19853
19854         (local_constant_declaration): It should take a
19855         constant_declarators, not a constant_declarator.  Fixes 49487
19856
19857         * convert.cs: Fix error report.
19858
19859 2003-10-13 Jackson Harper <jackson@ximian.com>
19860
19861         * typemanager.cs (TypeToCoreType): Add float and double this fixes
19862         bug #49611
19863
19864 2003-10-09  Martin Baulig  <martin@ximian.com>
19865
19866         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
19867         to the .ctor.
19868         (MethodCore.DoDefineParameters): Removed the TypeContainer
19869         argument; use the DeclSpace which was passed to the .ctor instead.
19870         (MethodCore.CheckParameter): Take a DeclSpace instead of a
19871         TypeContainer; we only need a DeclSpace here.
19872
19873 2003-10-09  Martin Baulig  <martin@ximian.com>
19874
19875         * class.cs (MethodData): Added additional `DeclSpace ds' argument
19876         to the .ctor.
19877         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
19878         EmitContext's .ctor.    
19879
19880 2003-10-09  Martin Baulig  <martin@ximian.com>
19881
19882         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
19883         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
19884         AsAccessible(), moved them as well.
19885
19886         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
19887
19888 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
19889
19890         * cs-parser.jay : Renamed yyName to yyNames related to jay.
19891
19892 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
19893
19894         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
19895         generation for >=, as spotted by Paolo, bug 48679.  
19896         Patch from David Waite.
19897
19898         * cs-tokenizer.cs: Add handling for #pragma.
19899
19900         * cs-parser.jay: Allow for both yield and yield return in the
19901         syntax.  The anti-cobolization of C# fight will go on!
19902
19903         * class.cs (TypeBuilder.DefineType): Catch error condition here
19904         (Parent.DefineType erroring out and returning null).
19905
19906         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
19907         coping with enumerations variables, we were mistakenly processing
19908         them as a regular value type instead of built-in types.  Fixes the
19909         bug #48063
19910
19911         * typemanager.cs (IsBuiltinOrEnum): New method.
19912
19913 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
19914
19915         * cs-parser.jay: Upgrade: yield now needs the return clause.
19916
19917 2003-09-19  Martin Baulig  <martin@ximian.com>
19918
19919         * decl.cs (MemberCache.SetupCacheForInterface): Take a
19920         `MemberCache parent' argument.  Normally, an interface doesn't
19921         have a parent type except System.Object, but we use this in gmcs
19922         for generic type parameters.
19923
19924 2003-09-18  Martin Baulig  <martin@ximian.com>
19925
19926         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
19927         on `type.IsInterface'; don't check whether the type has a parent
19928         to determine whether it's an interface.
19929
19930 2003-09-15  Martin Baulig  <martin@ximian.com>
19931
19932         * class.cs (TypeContainer.DefineType): Added an error flag to
19933         avoid reporting duplicate CS0146's ("class definition is
19934         circular.").
19935
19936         * driver.cs (Driver.MainDriver): Abort if
19937         RootContext.ResolveTree() reported any errors.
19938
19939 2003-09-07  Martin Baulig  <martin@ximian.com>
19940
19941         * report.cs (Error, Warning): Added overloaded versions which take
19942         a `params object[] args' and call String.Format().
19943
19944 2003-09-07  Martin Baulig  <martin@ximian.com>
19945
19946         * decl.cs (DeclSpace..ctor): Don't call
19947         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
19948         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
19949         (DeclSpace.RecordDecl): New method.
19950
19951         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
19952
19953 2003-09-02  Ravi Pratap  <ravi@ximian.com>
19954
19955         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
19956         value attributes to be applied to ParameterBuilders.
19957
19958         * class.cs (MethodCore.LabelParameters): Make static and more
19959         generic so that it can be used from other places - like interface
19960         methods, for instance.
19961
19962         * interface.cs (Interface.Emit): Call LabelParameters before
19963         emitting attributes on the InterfaceMethod.
19964
19965 2003-08-26  Martin Baulig  <martin@ximian.com>
19966
19967         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
19968         resolving aliases; fixes #47927.
19969
19970 2003-08-26  Martin Baulig  <martin@ximian.com>
19971
19972         * statement.cs (Using.DoResolve): This is internally emitting a
19973         try/finally clause, so we need to set ec.NeedExplicitReturn if we
19974         do not always return.  Fixes #47681.
19975
19976 2003-08-26  Martin Baulig  <martin@ximian.com>
19977
19978         * decl.cs (MemberCore): Moved WarningNotHiding(),
19979         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
19980         into MemberBase.
19981         (AdditionResult): Make this nested in DeclSpace.
19982         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
19983         argument; call NamespaceEntry.Define() unless we're nested in a
19984         class or struct.
19985
19986         * namespace.cs (Namespace.DefineName): New public function.  This
19987         is called from DeclSpace's .ctor to add 
19988         (Namespace.Lookup): Include DeclSpaces in the lookup.
19989
19990         * class.cs (Operator): Derive from MemberBase, not MemberCore.
19991
19992         * const.cs (Const): Derive from MemberBase, not MemberCore.     
19993
19994 2003-08-25  Martin Baulig  <martin@ximian.com>
19995
19996         * convert.cs (Convert.ExplicitReferenceConversion): When
19997         converting from an interface type to a class, unbox if the target
19998         type is a struct type.  Fixes #47822.
19999
20000 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20001
20002         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
20003         #47854.
20004
20005 2003-08-22  Martin Baulig  <martin@ximian.com>
20006
20007         * class.cs (TypeManager.DefineType): When defining a nested type,
20008         call DefineType() on our parent; fixes #47801.
20009
20010 2003-08-22  Martin Baulig  <martin@ximian.com>
20011
20012         * class.cs (MethodData.Define): While checking if a method is an
20013         interface implementation, improve the test a bit more to fix #47654.
20014
20015 2003-08-22  Martin Baulig  <martin@ximian.com>
20016
20017         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
20018         correctly; fixes #47722.
20019
20020 2003-08-22  Martin Baulig  <martin@ximian.com>
20021
20022         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
20023         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
20024
20025         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
20026
20027 2003-08-22  Martin Baulig  <martin@ximian.com>
20028
20029         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
20030         can only be assigned in static constructors.  Fixes #47161.
20031
20032 2003-08-22  Martin Baulig  <martin@ximian.com>
20033
20034         Rewrote and improved the flow analysis code.
20035
20036         * flowbranching.cs (FlowBranching): Make this class abstract.
20037         (FlowBranching.CreateBranching): New static function to create a
20038         new flow branching.
20039         (FlowBranchingBlock, FlowBranchingException): New classes.
20040         (FlowBranching.UsageVector.Type): New public readonly field.
20041         (FlowBranching.UsageVector.Breaks): Removed the setter.
20042         (FlowBranching.UsageVector.Returns): Removed the setter.
20043         (FlowBranching.UsageVector): Added Break(), Return(),
20044         NeverReachable() and Throw() methods to modify the reachability.
20045         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
20046         done by FlowBranching.Merge().
20047         (FlowBranching.UsageVector.MergeChild): New method; merges the
20048         merge result into the current vector.
20049         (FlowBranching.Merge): New abstract method to merge a branching.
20050
20051 2003-08-12  Martin Baulig  <martin@ximian.com>
20052
20053         * expression.cs (Indirection.CacheTemporaries): Create the
20054         LocalTemporary with the pointer type, not its element type.
20055
20056 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
20057
20058         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
20059         token was a keyword or not.
20060
20061         Add `error' options where an IDENTIFIER was expected;  Provide
20062         CheckToken and CheckIdentifierToken convenience error reporting
20063         functions. 
20064
20065         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
20066
20067         * decl.cs: Rename `NamespaceEntry Namespace' public field into
20068         NameSpaceEntry NameSpaceEntry.
20069
20070         (LookupInterfaceOrClass): Avoid creating a full qualified name
20071         from namespace and name: avoid doing lookups when we know the
20072         namespace is non-existant.   Use new Tree.LookupByNamespace which
20073         looks up DeclSpaces based on their namespace, name pair.
20074
20075         * driver.cs: Provide a new `parser verbose' to display the
20076         exception thrown during parsing.  This is turned off by default
20077         now, so the output of a failure from mcs is more graceful.
20078
20079         * namespace.cs: Track all the namespaces defined in a hashtable
20080         for quick lookup.
20081
20082         (IsNamespace): New method
20083
20084 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
20085
20086         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
20087         we know that we need to concatenate (full typename can never be
20088         null). 
20089
20090         * class.cs: ditto.
20091
20092         * statement.cs: Use a bitfield;  Do not initialize to null things
20093         which are done by the constructor by default.
20094
20095         * cs-parser.jay: bug fix, parameter was 4, not 3.
20096
20097         * expression.cs: Just use the property;
20098
20099         * statement.cs: No need for GetVariableInfo method.
20100
20101 2003-08-08  Martin Baulig  <martin@ximian.com>
20102
20103         * flowanalysis.cs (FlowReturns): This is now nested in the
20104         `FlowBranching' class.
20105         (MyBitVector): Moved this here from statement.cs.
20106         (FlowBranching.SiblingType): New enum type.
20107         (FlowBranching.CreateSibling): Added `SiblingType' argument.
20108
20109 2003-08-07  Martin Baulig  <martin@ximian.com>
20110
20111         * flowanalysis.cs (FlowBranchingType): This is now nested in the
20112         `FlowBranching' class and called `BranchingType'.
20113
20114 2003-08-07  Martin Baulig  <martin@ximian.com>
20115
20116         * flowanalysis.cs: Moved all the control flow analysis code into
20117         its own file.
20118
20119 2003-08-07  Martin Baulig  <martin@ximian.com>
20120
20121         * assign.cs (Assign.DoResolve): `target' must either be an
20122         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
20123         #37319.
20124
20125 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
20126
20127         * expression.cs (BinaryMethod): This kind of expression is created by the
20128         Binary class if it determines that the operator has to be handled
20129         by a method.
20130
20131         (BinaryDelegate): This kind of expression is created if we are
20132         dealing with a + or - operator on delegates.
20133
20134         (Binary): remove method, argumetns, and DelegateOperator: when
20135         dealing with methods, 
20136
20137         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
20138
20139         * statement.cs (Block): use bitfields for the three extra booleans
20140         we had in use.   Remove unused topblock parameter.
20141
20142         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
20143
20144         * assign.cs: Drop extra unneeded tests.
20145
20146 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
20147
20148         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
20149
20150         * statement.cs (Foreach): Use VariableStorage instead of
20151         LocalBuilders.   
20152
20153         * codegen.cs (VariableStorage): New class used by clients that
20154         require a variable stored: locals or fields for variables that
20155         need to live across yield.
20156
20157         Maybe provide a convenience api for EmitThis+EmitLoad?
20158
20159         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
20160         these bad boys.
20161
20162 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
20163
20164         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
20165         RemapParameterLValue): New methods that are used to turn a
20166         precomputed FieldInfo into an expression like this:
20167
20168                 instance.FieldInfo
20169
20170         The idea is to use this instead of making LocalVariableReference
20171         have more than one meaning.
20172
20173         * cs-parser.jay: Add error production to BASE.
20174
20175         * ecore.cs: Deal with TypeManager.GetField returning null, which
20176         is now a valid return value.
20177
20178         (FieldExprNoAddress): New expression for Fields whose address can
20179         not be taken.
20180
20181         * expression.cs (LocalVariableReference): During the resolve
20182         phases, create new expressions if we are in a remapping context.
20183         Remove code that dealt with remapping here.
20184
20185         (ParameterReference): same.
20186
20187         (ProxyInstance): New expression, like the `This' expression, but
20188         it is born fully resolved.  We know what we are doing, so remove
20189         the errors that are targeted to user-provided uses of `this'.
20190
20191         * statement.cs (Foreach): our variable is now stored as an
20192         Expression;  During resolution, follow the protocol, dont just
20193         assume it will return this.
20194
20195 2003-08-06  Martin Baulig  <martin@ximian.com>
20196
20197         * support.cs (SeekableStreamReader.cs): New public class.
20198
20199         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
20200         SeekableStreamReader instead of the normal StreamReader.
20201
20202 2003-08-04  Martin Baulig  <martin@ximian.com>
20203
20204         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
20205         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
20206         deambiguate casts and delegate invocations.
20207         (parenthesized_expression): Use the new tokens to ensure this is
20208         not a cast of method invocation.
20209
20210         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
20211         when reading a `)' and Deambiguate_CloseParens () was previously
20212         called.
20213
20214         * expression.cs (ParenthesizedExpression): New class.  This is
20215         just used for the CS0075 test.
20216         (Binary.DoResolve): Check for CS0075.   
20217
20218 2003-07-29  Ravi Pratap  <ravi@ximian.com>
20219
20220         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
20221         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
20222         reference comparison.
20223
20224         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
20225         examine the ReturnType for equality - this is necessary in the
20226         cases of implicit and explicit operators whose signature also
20227         includes the return type.
20228
20229 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
20230
20231         * namespace.cs: Cache the result of the namespace computation,
20232         instead of computing it every time.
20233
20234 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
20235
20236         * decl.cs: Use a global arraylist that we reuse over invocations
20237         to avoid excesive memory consumption.  Reduces memory usage on an
20238         mcs compile by one meg (45 average).
20239
20240         * typemanager.cs (LookupTypeReflection): In .NET pointers are
20241         private, work around that.
20242
20243 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
20244
20245         * literal.cs (IntLiteral): Define Zero and One static literals. 
20246
20247         * cs-parser.jay (integer_literal): use static literals to reduce
20248         memory usage for the most used literals (0, 1 and -1).  211kb
20249         reduced in memory usage.
20250
20251         Replace all calls to `new ArrayList' with `new
20252         ArrayList(4)' which is a good average number for most allocations,
20253         and also requires only 16 bytes of memory for its buffer by
20254         default. 
20255
20256         This reduced MCS memory usage in seven megabytes for the RSS after
20257         bootstrapping.
20258
20259 2003-07-28  Ravi Pratap  <ravi@ximian.com>
20260
20261         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
20262         handle params methods the correct way by forming only one
20263         applicable set with params and normal methods in them. Earlier we
20264         were looking at params methods only if we found no normal methods
20265         which was not the correct thing to do.
20266
20267         (Invocation.BetterFunction): Take separate arguments indicating
20268         when candidate and the best method are params methods in their
20269         expanded form.
20270
20271         This fixes bugs #43367 and #46199.
20272
20273         * attribute.cs: Documentation updates.
20274
20275         (CheckAttribute): Rename to CheckAttributeTarget.
20276         (GetValidPlaces): Rename to GetValidTargets.
20277
20278         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
20279         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
20280
20281         Fixes bug #44468.
20282
20283 2003-07-28  Martin Baulig  <martin@ximian.com>
20284
20285         * class.cs (TypeContainer.DefineMembers): Use the base type's full
20286         name when looking up the base class of a nested class.  Fixes #46977.
20287
20288 2003-07-26  Martin Baulig  <martin@ximian.com>
20289
20290         * expression.cs (Indexers.Indexer): New nested struct; contains
20291         getter, setter and the indexer's type.
20292         (Indexers.Properties): This is now an ArrayList of
20293         Indexers.Indexer's.
20294         (IndexerAccess.DoResolveLValue): Correctly set the type if the
20295         indexer doesn't have any getters.
20296
20297         * assign.cs (Assign.DoResolve): Also do the implicit conversions
20298         for embedded property and indexer assignments.
20299
20300 2003-07-26  Martin Baulig  <martin@ximian.com>
20301
20302         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
20303         preprocessor directive is not the first non-whitespace character
20304         on a line.
20305
20306 2003-07-26  Martin Baulig  <martin@ximian.com>
20307
20308         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
20309         namespace parsing, follow the spec more closely.
20310
20311         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
20312         NamespaceEntry.Lookup().
20313
20314 2003-07-25  Martin Baulig  <martin@ximian.com>
20315
20316         * MethodCore.cs (OverridesSomething): New public field; it's set
20317         from TypeContainer.DefineMembers if this method overrides
20318         something (which doesn't need to be a method).  Fix #39462.
20319
20320 2003-07-25  Ravi Pratap  <ravi@ximian.com>
20321
20322         * typemanager.cs (GetMembers): Ensure that the list of members is
20323         reversed. This keeps things in sync.
20324
20325         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
20326         find an AttributeUsage attribute.
20327
20328         * expression.cs (Invocation.OverloadResolve): Perform the check
20329         which disallows Invoke to be directly called on a Delegate.
20330
20331         (Error_InvokeOnDelegate): Report error cs1533.
20332
20333 2003-07-25  Martin Baulig  <martin@ximian.com>
20334
20335         * expression.cs (Indexers.GetIndexersForType): Only look in the
20336         interface hierarchy if the requested type is already an
20337         interface.  Fixes #46788 while keeping #46502 fixed.
20338
20339 2003-07-25  Martin Baulig  <martin@ximian.com>
20340
20341         * class.cs (TypeContainer.DefineMembers): Check whether all
20342         readonly fields have been assigned and report warning CS0649 if
20343         not.
20344
20345         * statement.cs (LocalInfo.IsFixed): Always return true if this is
20346         a valuetype.
20347
20348 2003-07-24  Ravi Pratap  <ravi@ximian.com>
20349
20350         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
20351         returned from GetMethods to make things consistent with the
20352         assumptions MCS makes about ordering of methods.
20353
20354         This should comprehensively fix bug #45127 and it does :-)
20355
20356         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
20357         ordering is actually reverse.
20358
20359         * Clean up some debug messages I left lying around.
20360
20361         * interface.cs (Populate*): Get rid of code which emits attributes
20362         since the stage in which we emit attributes is the 'Emit' stage,
20363         not the define stage.
20364
20365         (Emit): Move attribute emission for interface members here.
20366
20367 2003-07-22  Ravi Pratap  <ravi@ximian.com>
20368
20369         * expression.cs (Invocation.OverloadResolve): Follow the spec more
20370         closely: we eliminate methods in base types when we have an
20371         applicable method in a top-level type.
20372
20373         Please see section 14.5.5.1 for an exact description of what goes
20374         on. 
20375
20376         This fixes bug #45127 and a host of other related to corlib compilation.
20377
20378         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
20379         array is the method corresponding to the top-level type (this is
20380         because of the changes made to icall.c) so we change this
20381         accordingly.
20382
20383         (MethodGroupExpr.Name): This too.
20384
20385         * typemanager.cs (GetElementType): New method which does the right
20386         thing when compiling corlib. 
20387
20388         * everywhere: Make use of the above in the relevant places.
20389
20390 2003-07-22  Martin Baulig  <martin@ximian.com>
20391
20392         * cs-parser.jay (invocation_expression): Moved
20393         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
20394         `cast_expression', but create a InvocationOrCast which later
20395         resolves to either an Invocation or a Cast.
20396
20397         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
20398         method; call this before EmitStatement() to make sure that this
20399         expression can be used as a statement.
20400
20401         * expression.cs (InvocationOrCast): New class; resolves to either
20402         an Invocation or a Cast.
20403
20404         * statement.cs (StatementExpression): Call ResolveStatement() on
20405         the ExpressionStatement before emitting it.
20406
20407 2003-07-21  Martin Baulig  <martin@ximian.com>
20408
20409         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
20410         `ref' and `out' attributes match; fixes #46220.
20411         (MemberAccess.ResolveMemberAccess): You can't reference a type
20412         through an expression; fixes #33180.
20413         (Indexers.GetIndexersForType): Don't return the indexers from
20414         interfaces the class implements; fixes #46502.
20415
20416 2003-07-21  Martin Baulig  <martin@ximian.com>
20417
20418         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
20419         CS0661 checks; fixes bug #30442.
20420
20421 2003-07-21  Martin Baulig  <martin@ximian.com>
20422
20423         * decl.cs (AdditionResult): Added `Error'.
20424
20425         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
20426
20427         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
20428         makes cs0031.cs actually work.
20429
20430 2003-07-20  Martin Baulig  <martin@ximian.com>
20431
20432         * namespace.cs: Fixed that bug which caused a crash when compiling
20433         the debugger's GUI.
20434
20435 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
20436
20437         * typemanager.cs (LookupTypeReflection): Never expose types which
20438         are NotPublic, NestedPrivate, NestedAssembly, or
20439         NestedFamANDAssem.  We used to return these, and later do a check
20440         that would report a meaningful error, but the problem is that we
20441         would not get the real match, if there was a name override.
20442
20443 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
20444
20445         * namespace.cs (Namespace, Name): Do not compute the namespace
20446         name dynamically, compute it in the constructor.  This reduced
20447         memory usage by 1697 KB.
20448
20449         * driver.cs: Use --pause to pause at the end.
20450
20451 2003-07-17  Peter Williams  <peter@newton.cx>
20452
20453         * Makefile: Change the name of the test target so that it doesn't
20454         conflict with the recursive test target.
20455
20456 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
20457
20458         * expression.cs (LocalVariableReference.Emit, EmitAssign,
20459         AddressOf): Do not use EmitThis, that was wrong, use the actual
20460         this pointer.
20461
20462 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
20463
20464         * class.cs (MethodData.Define): While checking if a method is an
20465         interface implementation, improve the test: If we are not public
20466         (use new test here: use the computed MethodAttributes directly,
20467         instead of the parsed modifier flags) check if the `implementing'
20468         method comes from an interface or not.
20469
20470         * pending.cs (VerifyPendingMethods): Slightly better error
20471         message.
20472
20473         * makefile: add test target that does the mcs bootstrap.
20474
20475 2003-07-16  Ravi Pratap  <ravi@ximian.com>
20476
20477         * interface.cs (Define): Do nothing here since there are no
20478         members to populate etc. Move the attribute emission out of here
20479         since this was just totally the wrong place to put it. Attribute
20480         application happens during the 'Emit' phase, not in the 'Define'
20481         phase.
20482
20483         (Emit): Add this method and move the attribute emission here
20484
20485         * rootcontext.cs (EmitCode): Call the Emit method on interface
20486         types too.
20487
20488 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
20489
20490         * expression.cs (OverloadResolve): Report error only if Location
20491         is not 'Null' which means that there was a probe going on.
20492
20493 2003-07-14  Martin Baulig  <martin@ximian.com>
20494
20495         * expression.cs (ConditionalLogicalOperator): New public class to
20496         implement user defined conditional logical operators.
20497         This is section 14.11.2 in the spec and bug #40505.
20498
20499 2003-07-14  Martin Baulig  <martin@ximian.com>
20500
20501         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
20502
20503 2003-07-14  Martin Baulig  <martin@ximian.com>
20504
20505         * codegen.cs (EmitContext.InFixedInitializer): New public field.
20506
20507         * ecore.cs (IVariable.VerifyFixed): New interface method.
20508
20509         * expression.cs (Unary.ResolveOperator): When resolving the `&'
20510         operator, check whether the variable is actually fixed.  Fixes bug
20511         #36055.  Set a variable definitely assigned when taking its
20512         address as required by the spec.
20513
20514         * statement.cs (LocalInfo.IsFixed): New field.
20515         (LocalInfo.MakePinned): Set `IsFixed' to true.
20516
20517 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
20518
20519         * attribute.cs (Attribute.Resolve): While doing a Member lookup
20520         for .ctors, ensure that we only ask for members declared in the
20521         attribute type (BindingFlags.DeclaredOnly).
20522
20523         Fixes bug #43632.
20524
20525         * expression.cs (Error_WrongNumArguments): Report error 1501
20526         correctly the way CSC does.
20527
20528 2003-07-13  Martin Baulig  <martin@ximian.com>
20529
20530         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
20531         lookup on the fully qualified name, to make things like "X.X" work
20532         where "X.X" is a fully qualified type name, but we also have a
20533         namespace "X" in the using list.  Fixes #41975.
20534
20535 2003-07-13  Martin Baulig  <martin@ximian.com>
20536
20537         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
20538         function. If we're a CompoundAssign, we need to create an embedded
20539         CompoundAssign, not an embedded Assign.
20540         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
20541         Fixes #45854.
20542
20543 2003-07-13  Martin Baulig  <martin@ximian.com>
20544
20545         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
20546         work to fix bug #46088.
20547
20548 2003-07-13  Ravi Pratap <ravi@ximian.com>
20549
20550         * class.cs (Operator.Emit): Do not emit attributes here - it is
20551         taken care of by the Method class that we delegate too. This takes
20552         care of bug #45876.
20553
20554 2003-07-10  Martin Baulig  <martin@ximian.com>
20555
20556         * expression.cs (TypeOfVoid): New class.
20557         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
20558
20559 2003-07-10  Martin Baulig  <martin@ximian.com>
20560
20561         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
20562         bug #35957.
20563
20564 2003-07-10  Martin Baulig  <martin@ximian.com>
20565
20566         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
20567         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
20568
20569         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
20570
20571         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
20572
20573 2003-07-10  Martin Baulig  <martin@ximian.com>
20574
20575         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
20576         of decimal.  Fixes #42850.
20577
20578         NOTE: I also fixed the created byte blob, but this doesn't work on
20579         the MS runtime and csc never produces any byte blobs for decimal
20580         arrays.
20581
20582 2003-07-10  Martin Baulig  <martin@ximian.com>
20583
20584         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
20585         structs; fixes #32068.
20586         (Block.AddChildVariableNames): Fixed #44302.
20587
20588 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20589
20590         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
20591
20592 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
20593
20594         * attribute.cs: And this test is onger needed.
20595
20596 2003-07-08  Martin Baulig  <martin@ximian.com>
20597
20598         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
20599         inaccessible types.  Fixes #36313.
20600
20601         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
20602
20603         * namespace.cs (NamespaceEntry): Create implicit entries for all
20604         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
20605         implicit entries for N1.N2 and N1.
20606
20607 2003-07-08  Martin Baulig  <martin@ximian.com>
20608
20609         Rewrote the handling of namespaces to fix a lot of the issues
20610         wrt. `using' aliases etc.
20611
20612         * namespace.cs (Namespace): Splitted this class into a
20613         per-assembly `Namespace' and a per-file `NamespaceEntry'.
20614
20615         * typemanager.cs (TypeManager.IsNamespace): Removed.
20616         (TypeManager.ComputeNamespaces): Only compute namespaces from
20617         loaded assemblies here, not the namespaces from the assembly we're
20618         currently compiling.
20619
20620 2003-07-08  Martin Baulig  <martin@ximian.com>
20621
20622         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
20623
20624 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
20625
20626         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
20627         already fixed it.  
20628
20629         I thought about the memory savings here, but LookupTypeReflection
20630         is used under already very constrained scenarios.  Compiling
20631         corlib or mcs only exposes one hit, so it would not really reduce
20632         any memory consumption.
20633
20634 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20635
20636         * typemanager.cs: fixes bug #45889 by only adding public types from
20637         other assemblies to the list of known types.
20638
20639 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
20640
20641         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
20642         on the type we resolved.
20643
20644 2003-07-05  Martin Baulig  <martin@ximian.com>
20645
20646         * pending.cs (PendingImplementation.ParentImplements): Don't
20647         create the proxy if the parent is abstract.
20648
20649         * class.cs (TypeContainer.DefineIndexers): Process explicit
20650         interface implementations first.  Fixes #37714.
20651
20652 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
20653
20654         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
20655         defined recursively;  but since we modify the input parameters
20656         (left is set to `this' temporarily), we reset this value if the
20657         left_is_explicit is false, which gives the original semantics to
20658         the code.  
20659
20660         * literal.cs (NullPointer): new class used to represent a null
20661         literal in a pointer context.
20662
20663         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
20664         type is a pointer, use a NullPointer object instead of a
20665         NullLiteral.   Closes 43687
20666
20667         (ExplicitConversion): Convert pointer values using
20668         the conv opcode to the proper type.
20669
20670         * ecore.cs (New): change ValueTypeVariable property into a method,
20671         that returns whether the valuetype is suitable for being used.
20672
20673         * expression.cs (Binary.DoNumericPromotions): Only return if we
20674         the int constant was a valid uint, and we can return both left and
20675         right as uints.  If not, we continue processing, to trigger the
20676         type conversion.  This fixes 39018.
20677
20678         * statement.cs (Block.EmitMeta): During constant resolution, set
20679         the CurrentBlock property on the emitcontext, so that we resolve
20680         constants propertly.
20681
20682 2003-07-02  Martin Baulig  <martin@ximian.com>
20683
20684         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
20685         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
20686
20687         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
20688         than emitting it here.
20689
20690         * statement.cs: Fixed some more flow analysis bugs.
20691
20692 2003-07-02  Martin Baulig  <martin@ximian.com>
20693
20694         * class.cs (MethodData.Define): When implementing interface
20695         methods, set Final unless we're Virtual.
20696
20697         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
20698         check work for interface methods.
20699
20700 2003-07-01  Martin Baulig  <martin@ximian.com>
20701
20702         * ecore.cs (EmitContext.This): Replaced this property with a
20703         GetThis() method which takes a Location argument.  This ensures
20704         that we get the correct error location for a CS0188.
20705
20706 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
20707
20708         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
20709         ImplicitStandardConversion.
20710
20711         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
20712
20713 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
20714
20715         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
20716         optimization.
20717
20718 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
20719
20720         * class.cs (Constructor.Define): Turn off initlocals for unsafe
20721         constructors.
20722
20723         (MethodData.Define): Turn off initlocals for unsafe methods.
20724
20725 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
20726
20727         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
20728         complete;  Fixes #37521.
20729
20730         * delegate.cs: Use Modifiers.TypeAttr to compute the
20731         TypeAttributes, instead of rolling our own.  This makes the flags
20732         correct for the delegates.
20733
20734 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
20735
20736         * class.cs (Constructor.Define): Set the private flag for static
20737         constructors as well.
20738
20739         * cs-parser.jay (statement_expression): Set the return value to
20740         null, to avoid a crash when we catch an error.
20741
20742 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
20743
20744         * cs-parser.jay: Applied patch from Jackson that adds support for
20745         extern and unsafe modifiers to destructor declarations.
20746
20747         * expression.cs: Report error 21 if the user is trying to index a
20748         System.Array.
20749
20750         * driver.cs: Add an error message, suggested by the bug report.
20751
20752         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
20753         if we do not have a ": this ()" constructor initializer.  Fixes 45149
20754
20755 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
20756
20757         * namespace.cs: Add some information to reduce FAQs.
20758
20759 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
20760
20761         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
20762         underlying enumeration types.  Fixes #43915.
20763
20764         * expression.cs: Treat ushort/short as legal values to be used in
20765         bitwise operations.
20766
20767 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
20768
20769         * delegate.cs: transfer custom attributes for paramenters from
20770         the delegate declaration to Invoke and BeginInvoke.
20771
20772 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
20773
20774         * attribute.cs: handle custom marshalers and emit marshal info
20775         for fields, too.
20776
20777 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
20778
20779         * makefile.gnu: Added anonymous.cs to the compiler sources.
20780
20781 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
20782
20783         * iterators.cs: Change the name of the proxy class to include two
20784         underscores.
20785
20786         * cs-parser.jay: Update grammar to include anonymous methods.
20787
20788         * anonymous.cs: new file.
20789
20790 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
20791
20792         * class.cs (Field.Define): Add missing test for pointers and
20793         safety. 
20794
20795 2003-05-27  Ravi Pratap  <ravi@ximian.com>
20796
20797         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
20798         we use the stobj opcode.
20799
20800         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
20801         since it wasn't the correct fix. 
20802
20803         It still is puzzling that we are required to use stobj for IntPtr
20804         which seems to be a ValueType.
20805
20806 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
20807
20808         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
20809         during regular simple name resolution.   Now, the trick is that
20810         instead of returning for processing the simplename, we do a
20811         TypeManager.LookupType (ie, a rooted lookup as opposed to a
20812         contextual lookup type).   If a match is found, return that, if
20813         not, return for further composition.
20814
20815         This fixes long-standing 30485.
20816
20817         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
20818         using the address to initialize an object, do an Stobj instead of
20819         using the regular Stelem.
20820
20821         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
20822         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
20823         Because if we are a BaseIndexerAccess that value will be true.
20824         Fixes 43643.
20825
20826         * statement.cs (GotoCase.Resolve): Return after reporting an
20827         error, do not attempt to continue. 
20828
20829         * expression.cs (PointerArithmetic.Emit): If our operand is a
20830         long, convert our constants to match the operand before
20831         multiplying.  Convert to I type before adding.   Fixes 43670.
20832
20833 2003-05-14  Ravi Pratap  <ravi@ximian.com>
20834
20835         * enum.cs (ImplicitConversionExists) : Rename to
20836         ImplicitEnumConversionExists to remove ambiguity. 
20837
20838         * ecore.cs (NullCast): New type of cast expression class which
20839         basically is very similar to EmptyCast with the difference being
20840         it still is a constant since it is used only to cast a null to
20841         something else
20842         (eg. (string) null)
20843
20844         * convert.cs (ImplicitReferenceConversion): When casting a null
20845         literal, we return a NullCast.
20846
20847         * literal.cs (NullLiteralTyped): Remove - I don't see why this
20848         should be around anymore.
20849
20850         The renaming (reported was slightly wrong). Corrections:
20851
20852         ConvertImplicitStandard -> ImplicitConversionStandard
20853         ConvertExplicitStandard -> ExplicitConversionStandard
20854
20855         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
20856         before passing them in !
20857
20858         * convert.cs (ImplicitConversionStandard): When comparing for
20859         equal expr and target types, ensure that expr is not a
20860         NullLiteral.
20861
20862         In general, we must not be checking (expr_type ==
20863         target_type) in the top level conversion methods
20864         (ImplicitConversion, ExplicitConversion etc). This checking is
20865         done in the methods that they delegate to.
20866
20867 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
20868
20869         * convert.cs: Move Error_CannotConvertType,
20870         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
20871         ImplicitNumericConversion, ImplicitConversionExists,
20872         ImplicitUserConversionExists, StandardConversionExists,
20873         FindMostEncompassedType, FindMostSpecificSource,
20874         FindMostSpecificTarget, ImplicitUserConversion,
20875         ExplicitUserConversion, GetConversionOperators,
20876         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
20877         TryImplicitIntConversion, Error_CannotConvertImplicit,
20878         ConvertImplicitRequired, ConvertNumericExplicit,
20879         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
20880         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
20881         its own file.
20882
20883         Perform the following renames:
20884
20885         StandardConversionExists -> ImplicitStandardConversionExists
20886         ConvertImplicit -> ImplicitConversion
20887         ConvertImplicitStandard -> ImplicitStandardConversion
20888         TryImplicitIntConversion -> ImplicitIntConversion
20889         ConvertImplicitRequired -> ImplicitConversionRequired
20890         ConvertNumericExplicit -> ExplicitNumericConversion
20891         ConvertReferenceExplicit -> ExplicitReferenceConversion
20892         ConvertExplicit -> ExplicitConversion
20893         ConvertExplicitStandard -> ExplicitStandardConversion
20894
20895 2003-05-19  Martin Baulig  <martin@ximian.com>
20896
20897         * statement.cs (TypeInfo.StructInfo): Made this type protected.
20898         (TypeInfo): Added support for structs having structs as fields.
20899
20900         * ecore.cs (FieldExpr): Implement IVariable.
20901         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
20902         VariableInfo for the field.
20903
20904 2003-05-18  Martin Baulig  <martin@ximian.com>
20905
20906         * expression.cs (This.DoResolve): Report a CS0027 if we're
20907         emitting a field initializer.
20908
20909 2003-05-18  Martin Baulig  <martin@ximian.com>
20910
20911         * expression.cs (This.ResolveBase): New public function.
20912         (This.DoResolve): Check for CS0188.
20913
20914         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
20915         This.Resolve().
20916
20917         * ecore.cs (MethodGroupExpr.DoResolve): Set the
20918         `instance_expression' to null if we don't have any non-static
20919         methods.
20920
20921 2003-05-18  Martin Baulig  <martin@ximian.com>
20922
20923         Reworked the way how local variables and parameters are handled by
20924         the flow analysis code.
20925
20926         * statement.cs (TypeInfo, VariableMap): New public classes.
20927         (VariableInfo): New public class.  This is now responsible for
20928         checking whether a variable has been assigned.  It is used for
20929         parameters and local variables.
20930         (Block.EmitMeta): Take the InternalParameters as argument; compute
20931         the layout of the flow vectors here.
20932         (Block.LocalMap, Block.ParameterMap): New public properties.
20933         (FlowBranching): The .ctor doesn't get the InternalParameters
20934         anymore since Block.EmitMeta() now computes the layout of the flow
20935         vector.
20936         (MyStructInfo): This class is now known as `StructInfo' and nested
20937         in `TypeInfo'; we don't access this directly anymore.
20938
20939         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
20940         property and removed IsAssigned(), IsFieldAssigned(),
20941         SetAssigned() and SetFieldAssigned(); we now call them on the
20942         VariableInfo so we don't need to duplicate this code everywhere.
20943
20944         * expression.cs (ParameterReference): Added `Block block' argument
20945         to the .ctor.
20946         (LocalVariableReference, ParameterReference, This): The new
20947         VariableInfo class is now responsible for all the definite
20948         assignment stuff.
20949
20950         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
20951         IsParameterAssigned, SetParameterAssigned): Removed.
20952
20953 2003-05-18  Martin Baulig  <martin@ximian.com>
20954
20955         * typemanager.cs (InitCoreTypes): Try calling
20956         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
20957         the 3-args-version.  Corlib now also needs our `void_type'.
20958         (GetMethod): Added overloaded version which takes an optional
20959         `bool report_errors' to allow lookups of optional methods.
20960
20961 2003-05-12  Martin Baulig  <martin@ximian.com>
20962
20963         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
20964         only used for locals and not for parameters.
20965
20966 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
20967
20968         * support.cs (InternalParameters.ParameterType): Return the
20969         ExternalType of the parameter.
20970
20971         * parameter.cs (Parameter.ExternalType): drop the two arguments,
20972         they were unused.
20973
20974 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
20975
20976         * class.cs (MethodData.Define): Do not set the `newslot' on
20977         interface members, if they are also flagged as "override".
20978
20979         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
20980         better code for ++i and i++.  This only works for static fields
20981         and local variables.
20982
20983         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
20984         want to pull the DeclSpace out of the builder_to_declspace instead
20985         of the TypeBuilder (like in TypeContainer.FindMembers).
20986
20987         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
20988         instead of LookupTypeContainer.  Fixes the crash on .NET for
20989         looking up interface members.
20990
20991         * const.cs: Create our own emit context during the Definition
20992         stage, so that constants are evaluated in the proper context, when
20993         a recursive definition happens.
20994
20995 2003-05-11  Martin Baulig  <martin@ximian.com>
20996
20997         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
20998         new block for a switch section.
20999         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
21000         the adding/lookup in the switch block.  Fixes #39828.
21001
21002 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
21003
21004         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
21005         functionality: I needed to convert the data after I had performed
21006         the add/sub operation into the operands type size.
21007
21008         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
21009         pass the type for the box operation, otherwise the resulting
21010         object would have been of type object.
21011
21012         (BoxedCast): Add constructor to specify the type to box as.
21013
21014 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
21015
21016         * iterators.cs: I was reusing the `count' variable inadvertently,
21017         take steps to not allow this to happen.
21018
21019 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
21020
21021         * attribute.cs (Attribute.Resolve): Params attributes are encoded
21022         by creating an array at the point where the params starts and
21023         putting all those arguments there, then adjusting the size of the
21024         array.
21025
21026 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
21027
21028         * expression.cs (New.AddressOf): Implement interface
21029         IMemoryLocation.  This is used when the `new' operator is used in
21030         the context of an invocation to a method on a value type.
21031
21032         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
21033         example. 
21034
21035         * namespace.cs: Also check the using aliases here.
21036
21037         * driver.cs: Move the test for using validity after the types have
21038         been entered, so we do a single pass that also includes the using
21039         aliases. 
21040
21041         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
21042         in the regular case.   CreateSiblingForFinally is doing extra
21043         error checking.
21044
21045         * attribute.cs (GetAttributeArgumentExpression): Store the result
21046         on an out value, and use the return value to indicate failure
21047         instead of using null (which is a valid return for Constant.GetValue).
21048
21049         * statement.cs: Perform the analysis flow for the increment
21050         portion after the statement, because this will be the real flow of
21051         execution.  Fixes #42385
21052
21053         * codegen.cs (EmitContext.EmitArgument,
21054         EmitContext.EmitStoreArgument): New helper functions when the
21055         RemapToProxy flag is set.
21056
21057         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
21058         function.
21059
21060         Add support for remapping parameters. 
21061
21062         * iterators.cs: Propagate parameter values;  Store parameter
21063         values in the proxy classes.
21064
21065 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
21066
21067         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
21068         need a proxy reference;  I do not know what I was thinking
21069
21070         * cs-parser.jay (constructor_initializer): catch another error,
21071         and display nice message.
21072
21073         (field_declaration): catch void field declaration
21074         to flag a better error. 
21075
21076         * class.cs (MemberBase.CheckBase): Report an error instead of a
21077         warning if a new protected member is declared in a struct. 
21078         (Field.Define): catch the error of readonly/volatile.
21079
21080         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
21081
21082         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
21083         volatile variable is taken
21084
21085 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
21086
21087         * statement.cs (Fixed.Resolve): Report an error if we are not in
21088         an unsafe context.
21089
21090 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
21091
21092         * typemanager.cs: reuse the code that handles type clashes for
21093         delegates and enumerations.
21094
21095         * class.cs (Report28): Always report.
21096
21097         * expression.cs (EncodeAsAttribute): Allow nulls here.
21098
21099 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
21100
21101         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
21102         the functionality for testing whether an expression is valid for
21103         an attribute here.  Also handle the case of arrays of elements
21104         being stored. 
21105
21106         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
21107         encoding a linear array into an array of objects that are suitable
21108         to be passed to an CustomAttributeBuilder.
21109
21110         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
21111
21112         * ecore.cs: (FieldExpr): Handle field remapping here.
21113
21114         * iteratators.cs: Pass the instance variable (if the method is an
21115         instance method) to the constructors, so we can access the field
21116         variables on the class.
21117
21118         TODO: Test this with structs.  I think the THIS variable on
21119         structs might have to be a pointer, and not a refenrece
21120
21121 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
21122
21123         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
21124         local variables to fields in a proxy class.
21125
21126         * iterators.cs (PopulateProxy): Rename our internal fields to
21127         <XXX>.  
21128         Create a <THIS> field if we are an instance method, so we can
21129         reference our parent container variables.
21130         (MapVariable): Called back from the EmitContext code to enter a
21131         new variable to field mapping into the proxy class (we just create
21132         a FieldBuilder).
21133
21134         * expression.cs
21135         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
21136         for using the remapped locals to fields.
21137
21138         I placed the code here, because that gives the same semantics to
21139         local variables, and only changes the Emit code.
21140
21141         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
21142         statements inside iterators.
21143         (VariableInfo): Add a FieldBuilder for the cases when we are
21144         remapping local variables to fields in a proxy class
21145
21146         * ecore.cs (SimpleNameResolve): Avoid testing two times for
21147         current_block != null.
21148
21149         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
21150         not cope with strings, as it has been moved to the
21151         TableSwitchEmit.  Fixed bug in switch generation.
21152
21153         * expression.cs (New.DoResolve): Provide more context for the user
21154         when reporting an error.
21155
21156         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
21157         pointers. 
21158
21159         * expression.cs (MemberAccess.DoResolve): When we get a type back,
21160         check the permissions for it.  Note than in a type-resolution
21161         context the check was already present in DeclSpace.ResolveType,
21162         but was missing from the MemberAccess.
21163
21164         (ArrayCreation.CheckIndices): warn if the user has
21165         more nested levels of expressions, but there are no more
21166         dimensions specified.  Avoids crash on bug 41906.
21167
21168 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
21169
21170         * statement.cs (Block): replace Implicit bool, for a generic
21171         flags.   
21172         New flag: `Unchecked'.  This is used during the EmitMeta phase
21173         (which is out-of-line with the regular Resolve/Emit process for a
21174         statement, as this is done ahead of time, but still gets a chance
21175         to call constant resolve).
21176
21177         (Block.Flags): new enum for adding a new flag.
21178
21179         (Block.EmitMeta): track the state of unchecked.
21180
21181         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
21182         to enable constant resolution to work there as well.
21183
21184 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
21185
21186         * typemanager.cs (ienumerable_type): Also look up
21187         System.Collections.IEnumerable. 
21188
21189 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
21190
21191         TODO: Test more than one conditional per method.
21192
21193         * class.cs (Indexer.Define): Report the location where the user is
21194         referencing the unsupported feature.
21195
21196         (MethodData): Overload the use of `conditionals' to
21197         minimize the creation of needless ArrayLists.   This saves roughly
21198         212kb on my machine.
21199
21200         (Method): Implement the new IIteratorContainer interface.
21201         (Method.SetYields): Implement the method by setting the ModFlags
21202         to contain METHOD_YIELDS.
21203
21204         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
21205         which just got set to null.
21206
21207         * iterators.cs: New file.
21208
21209         (Yield, YieldBreak): New statements.
21210
21211         * statement.cs (Return.Resolve): Flag an error if we are used in
21212         an iterator method.
21213
21214         * codegen.cs (InIterator): New flag set if the code is being
21215         compiled in an iterator method.
21216
21217         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
21218         internal modifier, and we just use it to avoid adding extra
21219         fields, as this is seldom used.  
21220
21221         * cs-parser.jay: Add yield_statement (yield and yield break).
21222
21223         * driver.cs: New flag -v2 to turn on version 2 features. 
21224
21225         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
21226         hashtable when v2 is enabled.
21227
21228 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
21229
21230         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
21231         there is already a namespace defined with this name.
21232
21233         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
21234         people upgraded their corlibs.
21235
21236         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
21237         always use fully qualified types, no need to use the compiler
21238         front end.
21239
21240         (TypeManager.IsNamespace): Use binarysearch.
21241
21242         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
21243         AddDelegate): I did not quite use the new IsValid API properly: I
21244         have to pass the short-name and the fullname.  I was passing only
21245         the basename instead of the fullname sometimes. 
21246
21247         (TypeContainer.DefineType): call NamespaceClash.
21248
21249         * interface.cs (Interface.DefineType): use NamespaceClash before
21250         defining the type.
21251
21252         * delegate.cs (Delegate.DefineType): use NamespaceClash before
21253         defining the type.
21254
21255         * enum.cs: (Enum.DefineType): use NamespaceClash before
21256         defining the type.
21257
21258         * typemanager.cs (: 3-line patch that gives us some tasty 11%
21259         speed increase.  First, use the negative_hits cache when we get a
21260         negative.  Second, add the type with its full original name
21261         instead of the new . and + encoded name (reflection uses + to
21262         separate type from a nested type).  Use LookupTypeReflection
21263         directly which bypasses the type->name hashtable (that we already
21264         know does not contain the type.
21265
21266         * decl.cs (DeclSpace.ResolveTypeExpr): track the
21267         location/container type. 
21268
21269         * driver.cs: When passing utf8, use directly the UTF8Encoding.
21270
21271 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
21272
21273         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
21274
21275         * delegate.cs (NewDelegate.Resolve): Test whether an instance
21276         method is being referenced in the method group from a static
21277         context, and report error 120 if so.
21278
21279         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
21280         Error118. 
21281
21282         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
21283         is created, we create the A namespace).
21284
21285         * cs-parser.jay: A namespace also introduces a DeclarationFound.
21286         Fixes #41591
21287
21288 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
21289
21290         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
21291         invocation to ModuleBuilder.GetType with the same values will
21292         return a new type instance, so we need to cache its return
21293         values. 
21294
21295         * expression.cs (Binary.ResolveOperator): Only allow the compare
21296         operators on enums if they are of the same type.
21297
21298         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
21299         types of ValueType on their own case.  Before we were giving them
21300         the same treatment as objects.
21301
21302         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
21303         fullname.  Short name is used to compare against container name.
21304         Fullname is used to check against defined namespace names.
21305
21306         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
21307         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
21308
21309         (Method.CheckBase): Call parent.
21310         (MemberBase.CheckBase): Check for protected members on sealed
21311         classes.
21312         (PropertyBase.CheckBase): Call parent.
21313         (Field.Define): Call parent.
21314
21315         * report.cs: Negative error codes are now mapped to 8000 - code,
21316         so that the display is render more nicely.
21317
21318         * typemanager.cs: Do not use try/catch, instead report a regular
21319         error. 
21320
21321         (GetPointerType, GetReferenceType): These methods provide
21322         mechanisms to obtain the T* and T& from a T.  We had the code
21323         previously scattered around the code base, and it also used
21324         TypeManager.LookupType that would go through plenty of caches.
21325         This one goes directly to the type source.
21326
21327         In some places we did the Type.GetType followed by
21328         ModuleBuilder.GetType, but not in others, so this unifies the
21329         processing as well.
21330
21331         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
21332         statements now that we have namespace information.
21333
21334         * typemanager.cs (IsNamespace): New method, returns whether the
21335         string presented is a namespace or not.
21336
21337         (ComputeNamespaces): New public entry point, computes the list of
21338         available namespaces, using the GetNamespaces API call in Mono, or
21339         the slower version in MS.NET.   
21340
21341         Now before we start the semantic analysis phase, we have a
21342         complete list of namespaces including everything that the user has
21343         provided.
21344
21345         Deleted old code to cache namespaces in .nsc files.
21346
21347 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
21348
21349         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
21350         class/struct location definition Location for the implicit
21351         constructor location.
21352
21353         (Operator.Define): Use the location of the operator for the
21354         implicit Method definition.
21355
21356         (Constructor.Emit): use the constructor location for the implicit
21357         base initializer constructor.
21358
21359         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
21360         and the Expression class now contains two new methods:
21361
21362         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
21363         isolate type lookup from the rest of the resolution process.
21364
21365         Since we use Expressions to hold type definitions due to the way
21366         we parse the input we have historically overloaded Resolve to
21367         perform the Type lookups if a special flag is passed.  Now this is
21368         eliminated and two methods take their place. 
21369
21370         The differences in the two methods between xStep and xTerminal is
21371         that xStep is involved in our current lookup system that uses
21372         SimpleNames to compose a name, while xTerminal is used just to
21373         catch the case where the simplename lookup failed.
21374
21375 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
21376
21377         * expression.cs (ResolveMemberAccess): Remove redundant code.
21378         TypeExpr expressions are always born fully resolved.
21379
21380         * interface.cs (PopulateMethod): Do not lookup the types twice.
21381         We were doing it once during SemanticAnalysis and once during
21382         PopulateMethod.
21383
21384         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
21385         in local variable type definitions, were being returned as a
21386         SimpleName (we decomposed everything into a string), that is
21387         because primary_expression was being used instead of a type in the
21388         grammar (reduce/reduce conflicts).
21389
21390         The part that was wrong is that we converted the expression into a
21391         string (an oversimplification in one hand, compounded with primary
21392         expressions doing string concatenation).
21393
21394         So things like:
21395
21396         A.B.C [] x;
21397
21398         Would return "A.B.C[]" as a SimpleName.  This stopped things like
21399         using clauses from working on this particular context.  And a type
21400         was being matched directly against "A.B.C[]".
21401
21402         We now use the correct approach, and allow for ComposedCast to be
21403         part of the unary expression.  So the "A.B.C []" become a composed
21404         cast of "A.B.C" (as a nested group of MemberAccess with a
21405         SimpleName at the end) plus the rank composition "[]". 
21406
21407         Also fixes 35567
21408
21409 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
21410
21411         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
21412         for the access level checking.
21413
21414         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
21415         `TypeContainer container', because I kept getting confused when I
21416         was debugging this code.
21417
21418         * expression.cs (Indexers): Instead of tracking getters/setters,
21419         we now track them in parallel.  We create one arraylist less, but
21420         most importantly it is possible now for the LValue code to find a
21421         matching get for a set.
21422
21423         (IndexerAccess.DoResolveLValue): Update the code.
21424         GetIndexersForType has been modified already to extract all the
21425         indexers from a type.  The code assumed it did not.
21426
21427         Also make the code set the correct return type for the indexer.
21428         This was fixed a long time ago for properties, but was missing for
21429         indexers.  It used to be void_type.
21430
21431         (Binary.Emit): Test first for doubles instead of
21432         floats, as they are more common.
21433
21434         (Binary.EmitBranchable): Use the .un version of the branch opcodes
21435         when dealing with floats and the <=, >= operators.  This fixes bug
21436         #39314 
21437
21438         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
21439         to load the array value by emitting a load on the foreach variable
21440         type.  This was incorrect.  
21441
21442         We now emit the code to load an element using the the array
21443         variable type, and then we emit the conversion operator.
21444
21445         Fixed #40176
21446
21447 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
21448
21449         * attribute.cs: Avoid allocation of ArrayLists in the common case.
21450
21451 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
21452
21453         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
21454         test for protection before we test for signatures. 
21455
21456         (MethodSignature.ToString): implement.
21457
21458         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
21459         to the case where we reduced into a LongConstant.
21460
21461         * decl.cs (CheckAccessLevel): If the type is an array, we can not
21462         depend on whether the information is acurrate, because the
21463         Microsoft runtime will always claim that the array type is public,
21464         regardless of the real state.
21465
21466         If the type is a pointer, another problem happens: the type is
21467         reported as non-public in Microsoft.  
21468
21469         In both cases we have to call CheckAccessLevel recursively with
21470         the underlying type as the argument to be tested.
21471
21472 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
21473
21474         * assign.cs (Assign.Emit): If we are dealing with a compound
21475         assignment expression, we should use the code path that stores the
21476         intermediate result in a temporary value.  This fixes #40903.
21477
21478         *expression.cs (Indirection.ToString): Provide ToString method for
21479         debugging. 
21480
21481 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
21482
21483         * class.cs: Null out fields holding references to Block objects so
21484         they can be garbage collected.
21485
21486         * expression.cs (OverloadResolve): Remove unused local.
21487
21488 2003-04-07  Martin Baulig  <martin@ximian.com>
21489
21490         * codegen.cs (EmitContext.CurrentFile): New public field.
21491         (EmitContext.Mark): Use the CurrentFile to check whether the
21492         location is in the correct file.
21493         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
21494
21495 2003-04-07  Martin Baulig  <martin@ximian.com>
21496
21497         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
21498
21499         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
21500         location.  [FIXME: The location argument which gets passed to this
21501         method is sometimes wrong!]
21502
21503 2003-04-07  Nick Drochak <ndrochak@gol.com>
21504
21505         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
21506
21507 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
21508
21509         * expression.cs (Indirection.EmitAssign): We were using the
21510         temporary, but returning immediately instead of continuing the
21511         EmitAssing flow.
21512
21513 2003-04-06  Martin Baulig  <martin@ximian.com>
21514
21515         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
21516         if it's a nested child, but also deriving from the outer class.
21517         See test 190.cs.
21518
21519         * typemanager.cs (IsNestedChildOf): Make this work if it's a
21520         nested child, but also deriving from the outer class.  See
21521         test-190.cs.
21522         (FilterWithClosure): We may access private members of the outer
21523         class if we're a nested child and deriving from the outer class.
21524         (RealMemberLookup): Only set `closure_private_ok' if the
21525         `original_bf' contained BindingFlags.NonPublic.
21526
21527 2003-04-05  Martin Baulig  <martin@ximian.com>
21528
21529         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
21530
21531 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
21532
21533         * class.cs (Event.Define): Do not allow abstract events to have
21534         initializers. 
21535
21536 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
21537
21538         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
21539         block in event declarations.
21540
21541         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
21542         value type, get its address.
21543
21544         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
21545         leaving a class on the stack instead of a boolean value (int
21546         0/1).  Change the code so we compare against null, and then the
21547         result against zero.
21548
21549         * class.cs (TypeContainer.GetClassBases): We were checking for the
21550         parent class being sealed too late.
21551
21552         * expression.cs (Binary.Emit): For <= and >= when dealing with
21553         floating point values, use cgt.un and clt.un instead of cgt and
21554         clt alone.
21555
21556 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
21557
21558         * statement.cs: Apply the same optimization as MS: skip the 
21559         GetEnumerator returning an IEnumerator, and use the one returning a 
21560         CharEnumerator instead. This allows us to avoid the try-finally block 
21561         and the boxing.
21562
21563 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
21564
21565         * cs-parser.jay: Attributes cannot be applied to
21566                          namespaces. Fixes #40473
21567
21568 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21569
21570         * class.cs:
21571         (Add*): check if the name is valid using the full name for constants,
21572         fields, properties and events.
21573
21574 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
21575
21576         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
21577         char constants to be part of the enumeration.
21578
21579         * expression.cs (Conditional.DoResolve): Add support for operator
21580         true. Implements the missing functionality from 14.12
21581
21582         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
21583         operator true/false as required by the spec.
21584
21585         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
21586         implicit conversion to boolean.
21587
21588         * statement.cs (Statement.ResolveBoolean): A boolean expression is
21589         also one where the type implements `operator true'. 
21590
21591         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
21592         get an expression that will invoke operator true based on an
21593         expression.  
21594
21595         (GetConversionOperators): Removed the hack that called op_True
21596         here.  
21597
21598         (Expression.ResolveBoolean): Move this from Statement.
21599
21600 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
21601
21602         * ecore.cs (FieldExpr): do not allow initialization of initonly
21603         fields on derived classes
21604
21605 2003-03-13  Martin Baulig  <martin@ximian.com>
21606
21607         * statement.cs (Block.Emit): Call ig.BeginScope() and
21608         ig.EndScope() when compiling with debugging info; call
21609         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
21610
21611 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
21612
21613         * expression.cs (Indexers): Do not construct immediately, allow
21614         for new members to be appended as we go.  Fixes 38143
21615
21616 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21617
21618         * expression.cs: save/restore context when resolving an unchecked
21619         expression.
21620
21621 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
21622
21623         * cfold.cs: Catch division by zero in modulus operator during
21624         constant folding.
21625
21626 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
21627
21628         * interface.cs (Interface.DefineMembers): Avoid defining members
21629         twice. 
21630
21631 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
21632
21633         * driver.cs: handle the +/- options for -noconfig
21634
21635         * statement.cs (Unckeched.Resolve): Also track the state of
21636         unchecked in the Resolve phase.
21637
21638 2003-02-27  Martin Baulig  <martin@ximian.com>
21639
21640         * ecore.cs (Expression.MemberLookup): Don't create a
21641         MethodGroupExpr for something which is not a method.  Fixes #38291.
21642
21643 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
21644
21645         * class.cs (MemberBase.CheckParameters): Also check that the type
21646         is unmanaged if it is a pointer.
21647
21648         * expression.cs (SizeOf.Resolve): Add location information.
21649
21650         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
21651         a managed type is declared.
21652
21653         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
21654         parameter modifiers as well.  Fixes bug 38606
21655
21656         * class.cs: Very sad.  Am backing out the speed up changes
21657         introduced by the ArrayList -> Array in the TypeContainer, as they
21658         were not actually that much faster, and introduced a bug (no error
21659         reports on duplicated methods).
21660
21661         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
21662         source first, this will guarantee that we have a valid expression
21663         before calling in lower levels functions that will require a
21664         resolved object.  Then use this original_source in the
21665         target.ResolveLValue instead of the original source that was
21666         passed to us.
21667
21668         Another change.  Use target.Resolve instead of LValueResolve.
21669         Although we are resolving for LValues, we will let the Assign code
21670         take care of that (it will be called again from Resolve).  This
21671         basically allows code like this:
21672
21673         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
21674         class Y { void A (X x) { x [0] += o; }
21675
21676         The problem was that the indexer was trying to resolve for
21677         set_Item (idx, object o) and never finding one.  The real set_Item
21678         was set_Item (idx, X).  By delaying the process we get the right
21679         semantics. 
21680
21681         Fixes bug 36505
21682
21683 2003-02-23  Martin Baulig  <martin@ximian.com>
21684
21685         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
21686         while calling DoEmit ().
21687
21688         * codegen.cs (EmitContext.Mark): Don't mark locations in other
21689         source files; if you use the #line directive inside a method, the
21690         compiler stops emitting line numbers for the debugger until it
21691         reaches the end of the method or another #line directive which
21692         restores the original file.
21693
21694 2003-02-23  Martin Baulig  <martin@ximian.com>
21695
21696         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
21697
21698 2003-02-23  Martin Baulig  <martin@ximian.com>
21699
21700         * statement.cs (Block.AddChildVariableNames): We need to call this
21701         recursively, not just for our immediate children.
21702
21703 2003-02-23  Martin Baulig  <martin@ximian.com>
21704
21705         * class.cs (Event.Define): Always make the field private, like csc does.
21706
21707         * typemanager.cs (TypeManager.RealMemberLookup): Make events
21708         actually work, fixes bug #37521.
21709
21710 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
21711
21712         * delegate.cs: When creating the various temporary "Parameters"
21713         classes, make sure that we call the ComputeAndDefineParameterTypes
21714         on those new parameters (just like we do with the formal ones), to
21715         allow them to be resolved in the context of the DeclSpace.
21716
21717         This fixes the bug that Dick observed in Bugzilla #38530.
21718
21719 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
21720
21721         * expression.cs (ResolveMemberAccess): When resolving a constant,
21722         do not attempt to pull a constant if the value was not able to
21723         generate a valid constant.
21724
21725         * const.cs (LookupConstantValue): Do not report more errors than required.
21726
21727 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21728
21729         * expression.cs: fixes bug #38328.
21730
21731 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
21732
21733         * class.cs: Changed all the various members that can be part of a
21734         class from being an ArrayList to be an Array of the right type.
21735         During the DefineType type_list, interface_list, delegate_list and
21736         enum_list are turned into types, interfaces, delegates and enums
21737         arrays.  
21738
21739         And during the member population, indexer_list, event_list,
21740         constant_list, field_list, instance_constructor_list, method_list,
21741         operator_list and property_list are turned into their real arrays.
21742
21743         Although we could probably perform this operation earlier, for
21744         good error reporting we need to keep the lists and remove the
21745         lists for longer than required.
21746
21747         This optimization was triggered by Paolo profiling the compiler
21748         speed on the output of `gen-sample-program.pl' perl script. 
21749
21750         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
21751         not crash in methods like MemberLookupFailed that use this field.  
21752
21753         This problem arises when the compiler fails to resolve a type
21754         during interface type definition for example.
21755
21756 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
21757
21758         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
21759         inherit from System.Object, so we have to stop at null, not only
21760         when reaching System.Object.
21761
21762 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
21763
21764         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
21765         DeclaredOnly because the parent indexer might have had a different
21766         name, but did not loop until the top of the hierarchy was reached.
21767
21768         The problem this one fixes is 35492: when a class implemented an
21769         indexer from an interface, we were getting the interface method
21770         (which was abstract) and we were flagging an error (can not invoke
21771         abstract method).
21772
21773         This also keeps bug 33089 functioning, and test-148 functioning.
21774
21775         * typemanager.cs (IsSpecialMethod): The correct way of figuring
21776         out if a method is special is to see if it is declared in a
21777         property or event, or whether it is one of the predefined operator
21778         names.   This should fix correctly #36804.
21779
21780 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
21781
21782         The goal here is to remove the dependency on EmptyCast.Peel ().
21783         Killing it completely.
21784
21785         The problem is that currently in a number of places where
21786         constants are expected, we have to "probe" for an EmptyCast, and
21787         Peel, which is not the correct thing to do, as this will be
21788         repetitive and will likely lead to errors. 
21789
21790         The idea is to remove any EmptyCasts that are used in casts that
21791         can be reduced to constants, so we only have to cope with
21792         constants. 
21793
21794         This bug hunt was triggered by Bug 37363 and the desire to remove
21795         the duplicate pattern where we were "peeling" emptycasts to check
21796         whether they were constants.  Now constants will always be
21797         constants.
21798
21799         * ecore.cs: Use an enumconstant here instead of wrapping with
21800         EmptyCast.  
21801
21802         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
21803         throwing me off.  By handling this we can get rid of a few hacks.
21804
21805         * statement.cs (Switch): Removed Peel() code.
21806
21807 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
21808
21809         * class.cs: Location information for error 508
21810
21811         * expression.cs (New.DoResolve): Add a guard against double
21812         resolution of an expression.  
21813
21814         The New DoResolve might be called twice when initializing field
21815         expressions (see EmitFieldInitializers, the call to
21816         GetInitializerExpression will perform a resolve on the expression,
21817         and later the assign will trigger another resolution
21818
21819         This leads to bugs (#37014)
21820
21821         * delegate.cs: The signature for EndInvoke should contain any ref
21822         or out parameters as well.  We were not doing this in the past. 
21823
21824         * class.cs (Field.Define): Do not overwrite the type definition
21825         inside the `volatile' group.  Turns out that volatile enumerations
21826         were changing the type here to perform a validity test, which
21827         broke conversions. 
21828
21829 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
21830
21831         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
21832         and structs, we do not want to load the instance variable
21833
21834         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
21835         enum_type has to be handled like an object reference (implicit
21836         conversions exists from this to object), but the regular IsClass
21837         and IsValueType tests will never return true for this one.
21838
21839         Also we use TypeManager.IsValueType instead of type.IsValueType,
21840         just for consistency with the rest of the code (this is only
21841         needed if we ever use the construct exposed by test-180.cs inside
21842         corlib, which we dont today).
21843
21844 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
21845
21846         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
21847         just InternalCall.
21848
21849 2003-02-09  Martin Baulig  <martin@ximian.com>
21850
21851         * namespace.cs (Namespace..ctor): Added SourceFile argument.
21852         (Namespace.DefineNamespaces): New static public method; this is
21853         called when we're compiling with debugging to add all namespaces
21854         to the symbol file.
21855
21856         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
21857         pass it to the Namespace's .ctor.
21858
21859         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
21860         and MethodBase arguments; pass the namespace ID to the symwriter;
21861         pass the MethodBase instead of the token to the symwriter.
21862         (SymbolWriter.DefineNamespace): New method to add a namespace to
21863         the symbol file.
21864
21865 2003-02-09  Martin Baulig  <martin@ximian.com>
21866
21867         * symbolwriter.cs: New file.  This is a wrapper around
21868         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
21869         methods here in near future.
21870
21871 2003-02-09  Martin Baulig  <martin@ximian.com>
21872
21873         * codegen.cs (EmitContext.Mark): Just pass the arguments to
21874         ILGenerator.MarkSequencePoint() which are actually used by the
21875         symbol writer.
21876
21877 2003-02-09  Martin Baulig  <martin@ximian.com>
21878
21879         * location.cs (SourceFile): New public sealed class.  This
21880         contains the name and an index which is used in the location's token.
21881         (Location): Reserve an appropriate number of bits in the token for
21882         the source file instead of walking over that list, this gives us a
21883         really huge performance improvement when compiling with debugging.
21884
21885         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
21886         `SourceFile' argument instead of a string.
21887         (Driver.ProcessFile): Add all the files via Location.AddFile(),
21888         but don't parse/tokenize here, we need to generate the list of all
21889         source files before we do that.
21890         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
21891         the files.
21892
21893         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
21894         instead of a string.
21895
21896         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
21897         of a string.
21898
21899 2003-02-09  Martin Baulig  <martin@ximian.com>
21900
21901         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
21902         filename on `#line default'.
21903
21904 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
21905
21906         * statement.cs: don't clear the pinned var when the fixed statement
21907         returns from the method (fixes bug#37752).
21908
21909 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
21910
21911         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
21912         to IsValueType.
21913
21914 2003-02-07  Martin Baulig  <martin@ximian.com>
21915
21916         * driver.cs: Removed the `--debug-args' command line argument.
21917
21918         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
21919         automatically by the AsssemblyBuilder.
21920         (CodeGen.InitializeSymbolWriter): We don't need to call any
21921         initialization function on the symbol writer anymore.  This method
21922         doesn't take any arguments.
21923
21924 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
21925
21926         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
21927         from referenced assemblies as well.
21928
21929 2003-02-02  Martin Baulig  <martin@ximian.com>
21930
21931         * class.cs (MethodData.Emit): Generate debugging info for external methods.
21932
21933 2003-02-02  Martin Baulig  <martin@ximian.com>
21934
21935         * class.cs (Constructor.Emit): Open the symbol writer before
21936         emitting the constructor initializer.
21937         (ConstructorInitializer.Emit): Call ec.Mark() to allow
21938         single-stepping through constructor initializers.
21939
21940 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
21941
21942         * class.cs: Handle error 549: do not allow virtual methods in
21943         sealed classes. 
21944
21945 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
21946
21947         * decl.cs: Check access levels when resolving types
21948
21949 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
21950
21951         * statement.cs: Add parameters and locals set in catch blocks that might 
21952         return to set vector
21953
21954 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
21955
21956         * class.cs (Operator): Set the SpecialName flags for operators.
21957
21958         * expression.cs (Invocation.DoResolve): Only block calls to
21959         accessors and operators on SpecialName methods.
21960
21961         (Cast.TryReduce): Handle conversions from char constants.
21962
21963
21964 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
21965
21966         * statement.cs: small memory and time optimization in FlowBranching.
21967
21968 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
21969
21970         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
21971         problem that the last fix but in the other sid (Set).
21972
21973         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
21974         access when there is no indexer in the hierarchy.
21975
21976 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
21977
21978         * class.cs: Combine some if statements.
21979
21980 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21981
21982         * driver.cs: fixed bug #37187.
21983
21984 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
21985
21986         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
21987         any indexer, it's needed to build a list with all the indexers in the
21988         hierarchy (AllGetters), else we have problems. Fixes #35653.
21989
21990 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
21991
21992         * class.cs (MethodData.Define): It is wrong for an interface
21993         implementation to be static in both cases: explicit and implicit.
21994         We were only handling this in one case.
21995
21996         Improve the if situation there to not have negations.
21997
21998         * class.cs (Field.Define): Turns out that we do not need to check
21999         the unsafe bit on field definition, only on usage.  Remove the test.
22000
22001 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22002
22003         * driver.cs: use assembly.Location instead of Codebase (the latest
22004         patch made mcs fail when using MS assemblies).
22005
22006 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
22007
22008         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
22009         get the path to *corlib.dll.
22010
22011 2003-01-21  Nick Drochak <ndrochak@gol.com>
22012
22013         * cs-tokenizer.cs:
22014         * pending.cs:
22015         * typemanager.cs: Remove compiler warnings
22016
22017 2003-01-20  Duncan Mak  <duncan@ximian.com>
22018
22019         * AssemblyInfo.cs: Bump the version number to 0.19.
22020
22021 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22022
22023         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
22024
22025 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
22026
22027         * class.cs (Constructor::Emit): Emit debugging info for constructors.
22028
22029 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
22030
22031         * cs-parser.jay: Small fix: we were not comparing the constructor
22032         name correctly.   Thanks to Zoltan for the initial pointer.
22033
22034 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
22035
22036         * cs-tokenizer.cs: Set file name when specified with #line
22037
22038 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
22039
22040         * cs-parser.jay: Only perform the constructor checks here if we
22041         are named like the class;  This will help provider a better
22042         error.  The constructor path is taken when a type definition is
22043         not found, but most likely the user forgot to add the type, so
22044         report that rather than the constructor error.
22045
22046 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
22047
22048         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
22049         allocations.
22050
22051 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
22052
22053         * cs-parser.jay: Add cleanup call.
22054
22055 2003-01-13  Duncan Mak  <duncan@ximian.com>
22056
22057         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
22058         consistent with other methods.
22059
22060 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
22061
22062         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
22063
22064 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
22065
22066         * attribute.cs: only set GuidAttr to true when we have a
22067         GuidAttribute.
22068
22069 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22070
22071         * ecore.cs:
22072         * expression.cs:
22073         * typemanager.cs: fixes to allow mcs compile corlib with the new
22074         Type.IsSubclassOf fix.
22075
22076 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
22077
22078         * expression.cs (LocalVariableReference.DoResolve): Classify a
22079         constant as a value, not as a variable.   Also, set the type for
22080         the variable.
22081
22082         * cs-parser.jay (fixed_statement): take a type instead of a
22083         pointer_type, so we can produce a better error message later.
22084
22085         * statement.cs (Fixed.Resolve): Flag types that are not pointers
22086         as an error.  
22087
22088         (For.DoEmit): Make inifinite loops have a
22089         non-conditional branch back.
22090
22091         (Fixed.DoEmit): First populate the pinned variables, then emit the
22092         statement, then clear the variables.  Before I was emitting the
22093         code once for each fixed piece.
22094
22095
22096 2003-01-08  Martin Baulig  <martin@ximian.com>
22097
22098         * statement.cs (FlowBranching.MergeChild): A break in a
22099         SWITCH_SECTION does not leave a loop.  Fixes #36155.
22100
22101 2003-01-08  Martin Baulig  <martin@ximian.com>
22102
22103         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
22104         lives in the same number space than `param_map'.  Fixes #36154.
22105
22106 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
22107
22108         * cs-parser.jay (constructor_declaration): Set the
22109         Constructor.ModFlags before probing for it.  This makes the
22110         compiler report 514, 515 and 132 (the code was there, but got
22111         broken). 
22112
22113         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
22114         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
22115         (GotoCase.Resolve): Set `Returns' to ALWAYS.
22116
22117 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
22118
22119         * enum.cs: create the enum static fields using the enum type.
22120
22121 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
22122
22123         * class.cs: don't try to create the ParamBuilder for the return
22124         type if it's not needed (and handle it breaking for the ms runtime
22125         anyway).
22126
22127 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
22128
22129         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
22130
22131 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
22132
22133         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
22134         the command.   This showed up while compiling the JANET source
22135         code, which used \r as its only newline separator.
22136
22137 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
22138
22139         * class.cs (Method.Define): If we are an operator (because it
22140         reuses our code), then set the SpecialName and HideBySig.  #36128
22141
22142 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
22143
22144         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
22145         exception, report error 120 `object reference required'.
22146
22147         * driver.cs: Add --pause option, used during to measure the size
22148         of the process as it goes with --timestamp.
22149
22150         * expression.cs (Invocation.DoResolve): Do not allow methods with
22151         SpecialName to be invoked.
22152
22153 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
22154
22155         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
22156         number before adding it.
22157
22158 2002-12-21  Ravi Pratap  <ravi@ximian.com>
22159
22160         * ecore.cs (StandardImplicitConversion): When in an unsafe
22161         context, we allow conversion between void * to any other pointer
22162         type. This fixes bug #35973.
22163
22164 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
22165
22166         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
22167         is not thrown when extensionless outputs are used 
22168
22169 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22170
22171         * rootcontext.cs: fixed compilation of corlib.
22172
22173 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
22174
22175         * attribute.cs (Attributes.Contains): Add new method.
22176
22177         * class.cs (MethodCore.LabelParameters): if the parameter is an
22178         `out' parameter, check that no attribute `[In]' has been passed.
22179
22180         * enum.cs: Handle the `value__' name in an enumeration.
22181
22182 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
22183
22184         * decl.cs: Added special case to allow overrides on "protected
22185         internal" methods
22186
22187 2002-12-18  Ravi Pratap  <ravi@ximian.com>
22188
22189         * attribute.cs (Attributes.AddAttributeSection): Rename to this
22190         since it makes much more sense.
22191
22192         (Attributes.ctor): Don't require a Location parameter.
22193
22194         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
22195
22196         * attribute.cs (ApplyAttributes): Remove extra Location parameters
22197         since we already have that information per attribute.
22198
22199         * everywhere : make appropriate changes.
22200
22201         * class.cs (LabelParameters): Write the code which actually
22202         applies attributes to the return type. We can't do this on the MS
22203         .NET runtime so we flag a warning in the case an exception is
22204         thrown.
22205
22206 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
22207
22208         * const.cs: Handle implicit null conversions here too.
22209
22210 2002-12-17  Ravi Pratap  <ravi@ximian.com>
22211
22212         * class.cs (MethodCore.LabelParameters): Remove the extra
22213         Type [] parameter since it is completely unnecessary. Instead
22214         pass in the method's attributes so that we can extract
22215         the "return" attribute.
22216
22217 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
22218
22219         * cs-parser.jay (parse): Use Report.Error to flag errors instead
22220         of ignoring it and letting the compile continue.
22221
22222         * typemanager.cs (ChangeType): use an extra argument to return an
22223         error condition instead of throwing an exception.
22224
22225 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
22226
22227         * expression.cs (Unary.TryReduce): mimic the code for the regular
22228         code path.  Perform an implicit cast in the cases where we can
22229         implicitly convert to one of the integral types, and then reduce
22230         based on that constant.   This fixes bug #35483.
22231
22232 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22233
22234         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
22235
22236 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22237
22238         * namespace.cs: fixed bug #35489.
22239
22240 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
22241
22242         * class.cs: Remove some dead code.
22243
22244         * cs-parser.jay: Estimate the number of methods needed
22245         (RootContext.MethodCount);
22246
22247         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
22248         numbers instead of StringBuilders.
22249
22250         * support.cs (PtrHashtable): Add constructor with initial size;
22251         We can now reduce reallocations of the method table.
22252
22253 2002-12-10  Ravi Pratap  <ravi@ximian.com>
22254
22255         * attribute.cs (ApplyAttributes): Keep track of the emitted
22256         attributes on a per-target basis. This fixes bug #35413.
22257
22258 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
22259
22260         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
22261         default to the Windows 1252 encoding.
22262
22263         (UnixParseOption): Support version, thanks to Alp for the missing
22264         pointer. 
22265
22266         * AssemblyInfo.cs: Add nice assembly information.
22267
22268         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
22269         (bug 35169).
22270
22271         * cs-parser.jay: Allow a trailing comma before the close bracked
22272         in the attribute_section production.
22273
22274         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
22275         address of the instance was being taken, I will take this out,
22276         because we take the address of the object immediately here.
22277
22278 2002-12-09  Ravi Pratap  <ravi@ximian.com>
22279
22280         * typemanager.cs (AreMultipleAllowed): Take care of the most
22281         obvious case where attribute type is not in the current assembly -
22282         stupid me ;-)
22283
22284 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
22285
22286         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
22287         definitions, instead of doing that afterwards.  
22288
22289         Also we use a nice little hack, depending on the constructor, we
22290         know if we are a "composed" name or a simple name.  Hence, we
22291         avoid the IndexOf test, and we avoid 
22292
22293         * codegen.cs: Add code to assist in a bug reporter to track down
22294         the source of a compiler crash. 
22295
22296 2002-12-07  Ravi Pratap  <ravi@ximian.com>
22297
22298         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
22299         types have been emitted for a given element and flag an error
22300         if something which does not have AllowMultiple set is used more
22301         than once.
22302
22303         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
22304         attribute types and their corresponding AllowMultiple properties
22305
22306         (AreMultipleAllowed): Check the property for a given type.
22307
22308         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
22309         property in the case we have a TypeContainer.
22310
22311         (Attributes.AddAttribute): Detect duplicates and just skip on
22312         adding them. This trivial fix catches a pretty gross error in our
22313         attribute emission - global attributes were being emitted twice!
22314
22315         Bugzilla bug #33187 is now fixed.
22316
22317 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
22318
22319         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
22320         instead of pp_and).
22321
22322         * expression.cs (Binary.ResolveOperator): I can only use the
22323         Concat (string, string, string) and Concat (string, string,
22324         string, string) if the child is actually a concatenation of
22325         strings. 
22326
22327 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
22328
22329         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
22330         context where we need a 2-character lookahead.
22331
22332         * pending.cs (PendingImplementation): Rework so we can keep track
22333         of interface types all the time, and flag those which were
22334         implemented by parents as optional.
22335
22336 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
22337
22338         * expression.cs (Binary.ResolveOperator): Use
22339         String.Concat(string,string,string) or
22340         String.Concat(string,string,string,string) when possible. 
22341
22342         * typemanager: More helper methods.
22343
22344
22345 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
22346
22347         * pending.cs: remove the bogus return from GetMissingInterfaces()
22348         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
22349
22350 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22351
22352         * namespace.cs: avoid duplicated 'using xxx' being added to
22353         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
22354         when we get more than one 'using' statement for the same namespace.
22355         Report a CS0105 warning for it.
22356
22357 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
22358
22359         * cs-tokenizer.cs (consume_identifier): use read directly, instead
22360         of calling getChar/putback, uses internal knowledge of it.    
22361
22362         (xtoken): Reorder tokenizer so most common patterns are checked
22363         first.  This reduces the compilation time in another 5% (from 8.11s
22364         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
22365
22366         The parsing time is 22% of the compilation in mcs, and from that
22367         64% is spent on the tokenization process.  
22368
22369         I tried using a binary search for keywords, but this is slower
22370         than the hashtable.  Another option would be to do a couple of
22371         things:
22372
22373                 * Not use a StringBuilder, instead use an array of chars,
22374                   with a set value.  Notice that this way we could catch
22375                   the 645 error without having to do it *afterwards*.
22376
22377                 * We could write a hand-parser to avoid the hashtable
22378                   compares altogether.
22379
22380         The identifier consumption process takes 37% of the tokenization
22381         time.  Another 15% is spent on is_number.  56% of the time spent
22382         on is_number is spent on Int64.Parse:
22383
22384                 * We could probably choose based on the string length to
22385                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
22386                   computations. 
22387
22388         Another 3% is spend on wrapping `xtoken' in the `token' function.
22389
22390         Handle 0xa0 as whitespace (#34752)
22391
22392 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
22393
22394         * typemanager.cs (IsCLRType): New routine to tell whether a type
22395         is one of the builtin types.  
22396
22397         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
22398         typecode in more places instead of doing pointer comparissions.
22399         We could leverage some knowledge about the way the typecodes are
22400         laid out.
22401
22402         New code to cache namespaces in assemblies, it is currently not
22403         invoked, to be used soon.
22404
22405         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
22406
22407         * expression.cs (Binary.ResolveOperator): specially handle
22408         strings, and do not perform user-defined operator overloading for
22409         built-in types.
22410
22411 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
22412
22413         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
22414         internalcall as it is a pretty simple operation;  Avoid whenever
22415         possible to call Char.IsLetter.
22416
22417         (consume_identifier): Cut by half the number of
22418         hashtable calls by merging the is_keyword and GetKeyword behavior.
22419
22420         Do not short-circuit, because if we do, we
22421         report errors (ie, #if false && true would produce an invalid
22422         directive error);
22423
22424
22425 2002-11-24  Martin Baulig  <martin@ximian.com>
22426
22427         * expression.cs (Cast.TryReduce): If we're in checked syntax,
22428         check constant ranges and report a CS0221.  Fixes #33186.
22429
22430 2002-11-24  Martin Baulig  <martin@ximian.com>
22431
22432         * cs-parser.jay: Make this work for uninitialized variable
22433         declarations in the `for' initializer.  Fixes #32416.
22434
22435 2002-11-24  Martin Baulig  <martin@ximian.com>
22436
22437         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
22438         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
22439
22440 2002-11-24  Martin Baulig  <martin@ximian.com>
22441
22442         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
22443         argument; if true, we also check for user-defined conversions.
22444         This is only needed if both arguments are of a user-defined type.
22445         Fixes #30443, added test-175.cs.
22446         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
22447
22448         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
22449
22450 2002-11-24  Martin Baulig  <martin@ximian.com>
22451
22452         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
22453         function to get the store opcode.
22454         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
22455         only emit the Ldelema if the store opcode is Stobj.  You must run
22456         both test-34 and test-167 to test this.  Fixes #34529.
22457
22458 2002-11-23  Martin Baulig  <martin@ximian.com>
22459
22460         * ecore.cs (Expression.MemberLookup): Added additional
22461         `qualifier_type' argument which is used when we're being called
22462         from MemberAccess.DoResolve() and null if we're called from a
22463         SimpleName lookup.
22464         (Expression.MemberLookupFailed): New method to report errors; this
22465         does the CS1540 check and reports the correct error message.
22466
22467         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
22468         argument for the CS1540 check and redone the way how we're dealing
22469         with private members.  See the comment in the source code for details.
22470         (FilterWithClosure): Reverted this back to revision 1.197; renamed
22471         `closure_start_type' to `closure_qualifier_type' and check whether
22472         it's not null.  It was not this filter being broken, it was just
22473         being called with the wrong arguments.
22474
22475         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
22476         and pass it the correct `qualifier_type'; this also does the error
22477         handling for us.
22478
22479 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
22480
22481         * expression.cs (Invocation.EmitParams): If the we are dealing
22482         with a non-built-in value type, load its address as well.
22483
22484         (ArrayCreation): Use a a pretty constant instead
22485         of the hardcoded value 2.   Use 6 instead of 2 for the number of
22486         static initializers.  
22487
22488         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
22489         because they are not really value types, just glorified integers. 
22490
22491         * driver.cs: Do not append .exe, the CSC compiler does not do it.
22492
22493         * ecore.cs: Remove redundant code for enumerations, make them use
22494         the same code path as everything else, fixes the casting issue
22495         with enumerations in Windows.Forms.
22496
22497         * attribute.cs: Do only cast to string if it is a string, the
22498         validation happens later.
22499
22500         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
22501         people upgrade their corlibs.
22502
22503         * ecore.cs: Oops, enumerations were not following the entire code path
22504
22505 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
22506
22507         * typemanager.cs (FilterWithClosure): Commented out the test for
22508         1540 in typemanager.cs, as it has problems when accessing
22509         protected methods from a parent class (see test-174.cs). 
22510
22511         * attribute.cs (Attribute.ValidateGuid): new method.
22512         (Attribute.Resolve): Use above.
22513
22514 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
22515
22516         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
22517
22518         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
22519         handling for enumerations, as we only needed the TypeContainer
22520         functionality to begin with (this is required for the fix below to
22521         work for enums that reference constants in a container class for
22522         example). 
22523
22524         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
22525
22526         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
22527         a valid TypeBuilder to perform lookups on.o
22528
22529         * class.cs (InheritableMemberSignatureCompare): Use true in the
22530         call to GetGetMethod and GetSetMethod, because we are comparing
22531         the signature, and we need to get the methods *even* if they are
22532         private. 
22533
22534         (PropertyBase.CheckBase): ditto.
22535
22536         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
22537         GotoCase.Resolve): Use Peel on EmpytCasts.
22538
22539         * ecore.cs (EmptyCast): drop child, add Peel method.
22540
22541 2002-11-17  Martin Baulig  <martin@ximian.com>
22542
22543         * ecore.cs (EmptyCast.Child): New public property.
22544
22545         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
22546         label resolved to an EmptyCast.  Fixes #34162.
22547         (GotoCase.Resolve): Likewise.
22548         (Block.EmitMeta): Likewise.
22549
22550 2002-11-17  Martin Baulig  <martin@ximian.com>
22551
22552         * expression.cs (Invocation.BetterConversion): Prefer int over
22553         uint; short over ushort; long over ulong for integer literals.
22554         Use ImplicitConversionExists instead of StandardConversionExists
22555         since we also need to check for user-defined implicit conversions.
22556         Fixes #34165.  Added test-173.cs.
22557
22558 2002-11-16  Martin Baulig  <martin@ximian.com>
22559
22560         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
22561         with the `true' and `false' literals.  Fixes #33151.
22562
22563 2002-11-16  Martin Baulig  <martin@ximian.com>
22564
22565         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
22566         October 22nd; don't do the cs1540 check for static members.
22567
22568         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
22569         now using our own filter here and doing the cs1540 check again.
22570
22571 2002-11-16  Martin Baulig  <martin@ximian.com>
22572
22573         * support.cs (InternalParameters): Don't crash if we don't have
22574         any fixed parameters.  Fixes #33532.
22575
22576 2002-11-16  Martin Baulig  <martin@ximian.com>
22577
22578         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
22579         when looking up static methods to make this work on Windows.
22580         Fixes #33773.
22581
22582 2002-11-16  Martin Baulig  <martin@ximian.com>
22583
22584         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
22585         a setter rather than using PropertyInfo.CanWrite.
22586
22587 2002-11-15  Nick Drochak  <ndrochak@gol.com>
22588
22589         * class.cs: Allow acces to block member by subclasses. Fixes build
22590         breaker.
22591
22592 2002-11-14  Martin Baulig  <martin@ximian.com>
22593
22594         * class.cs (Constructor.Emit): Added the extern/block check.
22595         Fixes bug #33678.
22596
22597 2002-11-14  Martin Baulig  <martin@ximian.com>
22598
22599         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
22600         iteration while looking for indexers, this is needed because the
22601         indexer may have a different name in our base classes.  Fixed the
22602         error reporting (no indexers at all, not get accessor, no
22603         overloaded match).  Fixes bug #33089.
22604         (IndexerAccess.DoResolveLValue): Likewise.
22605
22606 2002-11-14  Martin Baulig  <martin@ximian.com>
22607
22608         * class.cs (PropertyBase.CheckBase): Make this work for multiple
22609         indexers.  Fixes the first part of bug #33089.
22610         (MethodSignature.InheritableMemberSignatureCompare): Added support
22611         for properties.
22612
22613 2002-11-13  Ravi Pratap  <ravi@ximian.com>
22614
22615         * attribute.cs (Attribute.Resolve): Catch the
22616         NullReferenceException and report it since it isn't supposed to
22617         happen. 
22618
22619 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
22620
22621         * expression.cs (Binary.EmitBranchable): Also handle the cases for
22622         LogicalOr and LogicalAnd that can benefit from recursively
22623         handling EmitBranchable.  The code now should be nice for Paolo.
22624
22625 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
22626
22627         * typemanager.cs (LookupType): Added a negative-hit hashtable for
22628         the Type lookups, as we perform quite a number of lookups on
22629         non-Types.  This can be removed once we can deterministically tell
22630         whether we have a type or a namespace in advance.
22631
22632         But this might require special hacks from our corlib.
22633
22634         * TODO: updated.
22635
22636         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
22637         and double which avoids a conversion from an integer to a double.
22638
22639         * expression.cs: tiny optimization, avoid calling IsConstant,
22640         because it effectively performs the lookup twice.
22641
22642 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
22643
22644         But a bogus return here to keep the semantics of the old code
22645         until the Mono runtime is fixed.
22646
22647         * pending.cs (GetMissingInterfaces): New method used to remove all
22648         the interfaces that are already implemented by our parent
22649         classes from the list of pending methods. 
22650
22651         * interface.cs: Add checks for calls after ResolveTypeExpr.
22652
22653 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
22654
22655         * class.cs (Class.Emit): Report warning 67: event not used if the
22656         warning level is beyond 3.
22657
22658         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
22659         being a NullLiteral.
22660
22661         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
22662         specifiers. 
22663
22664         * class.cs (TypeContainer.GetClassBases): Cover a missing code
22665         path that might fail if a type can not be resolved.
22666
22667         * expression.cs (Binary.Emit): Emit unsigned versions of the
22668         operators. 
22669
22670         * driver.cs: use error 5.
22671
22672 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
22673
22674         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
22675
22676 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
22677
22678         * cs-parser.jay (switch_section): A beautiful patch from Martin
22679         Baulig that fixed 33094.
22680
22681 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
22682
22683         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
22684         Check whether the base is abstract and report an error if so.
22685
22686         * expression.cs (IndexerAccess.DoResolveLValue,
22687         IndexerAccess.DoResolve): ditto. 
22688
22689         (Invocation.DoResolve): ditto.
22690
22691         (Invocation.FullMethodDesc): Improve the report string.
22692
22693         * statement.cs (Block): Eliminate IsVariableDefined as it is
22694         basically just a wrapper for GetVariableInfo.
22695
22696         * ecore.cs (SimpleName): Use new 
22697
22698         * support.cs (ReflectionParamter.ParameterType): We unwrap the
22699         type, as we return the actual parameter ref/unref state on a
22700         different call.
22701
22702 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
22703
22704         * support.cs: Return proper flags REF/OUT fixing the previous
22705         commit.  
22706
22707         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
22708         not used to mean `ref' but `ref or out' in ParameterReference
22709
22710         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
22711         full type signature instead of calling TypeManger.CSharpName
22712         ourselves. 
22713
22714         * support.cs (InternalParameters.ParameterDesc): Do not compare
22715         directly to the modflags, because REF/OUT will actually be bitsets
22716         if set. 
22717
22718         * delegate.cs (VerifyMethod): Check also the modifiers.
22719
22720         * cs-tokenizer.cs: Fix bug where floating point values with an
22721         exponent where a sign was missing was ignored.
22722
22723         * driver.cs: Allow multiple assemblies to be specified in a single
22724         /r: argument
22725
22726 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
22727
22728         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
22729         because identifiers after a parenthesis would end up in this kind
22730         of production, and we needed to desamiguate it for having casts
22731         like:
22732
22733                 (UserDefinedType *) xxx
22734
22735 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
22736
22737         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
22738         we should set on the Bindingflags.NonPublic, but not turn on
22739         private_ok.  private_ok controls whether a Private member is
22740         returned (this is chekced on the filter routine), while the
22741         BindingFlags.NonPublic just controls whether private/protected
22742         will be allowed.   This fixes the problem part of the problem of
22743         private properties being allowed to be used in derived classes.
22744
22745         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
22746         so we can call the children DoResolveLValue method (this will
22747         properly signal errors on lvalue assignments to base properties)
22748
22749         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
22750         getter are null, and we have a property info, we know that this
22751         happened because the lookup failed, so we report an error 122 for
22752         protection level violation.
22753
22754         We also silently return if setter and getter are null in the
22755         resolve functions, this condition only happens if we have flagged
22756         the error before.  This is the other half of the problem. 
22757
22758         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
22759         not have accessibility information, that is why we were returning
22760         true in the filter function in typemanager.cs.
22761
22762         To properly report 122 (property is inaccessible because of its
22763         protection level) correctly, we report this error in ResolveAccess
22764         by failing if both the setter and the getter are lacking (ie, the
22765         lookup failed). 
22766
22767         DoResolve and DoLResolve have been modified to check for both
22768         setter/getter being null and returning silently, the reason being
22769         that I did not want to put the knowledge about this error in upper
22770         layers, like:
22771
22772         int old = Report.Errors;
22773         x = new PropertyExpr (...);
22774         if (old != Report.Errors)
22775                 return null;
22776         else
22777                 return x;
22778
22779         So the property expr is returned, but it is invalid, so the error
22780         will be flagged during the resolve process. 
22781
22782         * class.cs: Remove InheritablePropertySignatureCompare from the
22783         class, as we no longer depend on the property signature to compute
22784         whether it is possible to implement a method or not.
22785
22786         The reason is that calling PropertyInfo.GetGetMethod will return
22787         null (in .NET, in Mono it works, and we should change this), in
22788         cases where the Get Method does not exist in that particular
22789         class.
22790
22791         So this code:
22792
22793         class X { public virtual int A { get { return 1; } } }
22794         class Y : X { }
22795         class Z : Y { public override int A { get { return 2; } } }
22796
22797         Would fail in Z because the parent (Y) would not have the property
22798         defined.  So we avoid this completely now (because the alternative
22799         fix was ugly and slow), and we now depend exclusively on the
22800         method names.
22801
22802         (PropertyBase.CheckBase): Use a method-base mechanism to find our
22803         reference method, instead of using the property.
22804
22805         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
22806         routines are gone now.
22807
22808         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
22809         names, they were incorrectly named.
22810
22811         * cs-tokenizer.cs: Return are more gentle token on failure. 
22812
22813         * pending.cs (PendingImplementation.InterfaceMethod): This routine
22814         had an out-of-sync index variable, which caused it to remove from
22815         the list of pending methods the wrong method sometimes.
22816
22817 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
22818
22819         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
22820         CanWrite, because those refer to this particular instance of the
22821         property, and do not take into account the fact that we can
22822         override single members of a property.
22823
22824         Constructor requires an EmitContext.  The resolution process does
22825         not happen here, but we need to compute the accessors before,
22826         because the resolution does not always happen for properties.
22827
22828         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
22829         subclass, before we did not update this flag, but we did update
22830         bindingflags. 
22831
22832         (GetAccessors): Drop this routine, as it did not work in the
22833         presence of partially overwritten set/get methods. 
22834
22835         Notice that this broke the cs1540 detection, but that will require
22836         more thinking. 
22837
22838 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22839
22840         * class.cs:
22841         * codegen.cs:
22842         * driver.cs: issue a warning instead of an error if we don't support
22843         debugging for the platform. Also ignore a couple of errors that may
22844         arise when trying to write the symbols. Undo my previous patch.
22845
22846 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22847
22848         * driver.cs: ignore /debug switch except for Unix platforms.
22849
22850 2002-10-23  Nick Drochak  <ndrochak@gol.com>
22851
22852         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
22853
22854 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
22855
22856         * driver.cs: Do not make mcs-debug conditional, so we do not break
22857         builds that use it.
22858
22859         * statement.cs (UsageVector.MergeChildren): I would like Martin to
22860         review this patch.  But basically after all the children variables
22861         have been merged, the value of "Breaks" was not being set to
22862         new_breaks for Switch blocks.  I think that it should be set after
22863         it has executed.  Currently I set this to the value of new_breaks,
22864         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
22865         conservative, but I do not understand this code very well.
22866
22867         I did not break anything in the build, so that is good ;-)
22868
22869         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
22870
22871 2002-10-20  Mark Crichton  <crichton@gimp.org>
22872
22873         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
22874
22875 2002-10-20  Nick Drochak  <ndrochak@gol.com>
22876
22877         * cfold.cs: Fixed compile blocker.
22878
22879 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
22880
22881         * driver.cs: I was chekcing the key, not the file.
22882
22883 2002-10-19  Ravi Pratap  <ravi@ximian.com>
22884
22885         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
22886         message that we were generating - we just need to silently return
22887         a null.
22888
22889 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
22890
22891         * class.cs (Event.Define): Change my previous commit, as this
22892         breaks the debugger.  This is a temporary hack, as it seems like
22893         the compiler is generating events incorrectly to begin with.
22894
22895         * expression.cs (Binary.ResolveOperator): Added support for 
22896         "U operator - (E x, E y)"
22897
22898         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
22899         y)".
22900
22901         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
22902         init-only variables, but this path did not take into account that
22903         there might be also instance readonly variables.  Correct this
22904         problem. 
22905
22906         This fixes bug 32253
22907
22908         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
22909         delegates as well.
22910
22911         * driver.cs: Change the extension for modules to `netmodule'
22912
22913         * cs-parser.jay: Improved slightly the location tracking for
22914         the debugger symbols.
22915
22916         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
22917         modifiers that were specified instead of the hardcoded value
22918         (FamAndAssem).  This was basically ignoring the static modifier,
22919         and others.  Fixes 32429.
22920
22921         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
22922         fixed a bug in the process (32476)
22923
22924         * expression.cs (ArrayAccess.EmitAssign): Patch from
22925         hwang_rob@yahoo.ca that fixes bug 31834.3
22926
22927 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
22928
22929         * driver.cs: Make the module extension .netmodule.
22930
22931 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
22932
22933         * driver.cs: Report an error if the resource file is not found
22934         instead of crashing.
22935
22936         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
22937         false, like Emit does.
22938
22939 2002-10-16  Nick Drochak  <ndrochak@gol.com>
22940
22941         * typemanager.cs: Remove unused private member.  Also reported mcs
22942         bug to report this as a warning like csc.
22943
22944 2002-10-15  Martin Baulig  <martin@gnome.org>
22945
22946         * statement.cs (Statement.Emit): Made this a virtual method; emits
22947         the line number info and calls DoEmit().
22948         (Statement.DoEmit): New protected abstract method, formerly knows
22949         as Statement.Emit().
22950
22951         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
22952
22953 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
22954
22955         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
22956         have fixed a remaining problem: not every AddXXXX was adding a
22957         fully qualified name.  
22958
22959         Now everyone registers a fully qualified name in the DeclSpace as
22960         being defined instead of the partial name.  
22961
22962         Downsides: we are slower than we need to be due to the excess
22963         copies and the names being registered this way.  
22964
22965         The reason for this is that we currently depend (on the corlib
22966         bootstrap for instance) that types are fully qualified, because
22967         we dump all the types in the namespace, and we should really have
22968         types inserted into the proper namespace, so we can only store the
22969         basenames in the defined_names array.
22970
22971 2002-10-10  Martin Baulig  <martin@gnome.org>
22972
22973         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
22974         from bug #31834, see the bug report for a testcase which is
22975         miscompiled.
22976
22977 2002-10-10  Martin Baulig  <martin@gnome.org>
22978
22979         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
22980         flow analysis code for this.
22981
22982         * statement.cs (Do, While, For): Tell the flow analysis code about
22983         infinite loops.
22984         (FlowBranching.UsageVector): Added support for infinite loops.
22985         (Block.Resolve): Moved the dead code elimination here and use flow
22986         analysis to do it.
22987
22988 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
22989
22990         * class.cs (Field.Define): Catch cycles on struct type
22991         definitions. 
22992
22993         * typemanager.cs (IsUnmanagedtype): Do not recursively check
22994         fields if the fields are static.  We only need to check instance
22995         fields. 
22996
22997         * expression.cs (As.DoResolve): Test for reference type.
22998
22999         * statement.cs (Using.ResolveExpression): Use
23000         ConvertImplicitRequired, not ConvertImplicit which reports an
23001         error on failture
23002         (Using.ResolveLocalVariableDecls): ditto.
23003
23004         * expression.cs (Binary.ResolveOperator): Report errors in a few
23005         places where we had to.
23006
23007         * typemanager.cs (IsUnmanagedtype): Finish implementation.
23008
23009 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
23010
23011         * expression.cs: Use StoreFromPtr instead of extracting the type
23012         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
23013
23014         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
23015         an enumeration value to a System.Enum, but System.Enum is not a
23016         value type, but an class type, so we need to box.
23017
23018         (Expression.ConvertExplicit): One codepath could return
23019         errors but not flag them.  Fix this.  Fixes #31853
23020
23021         * parameter.cs (Resolve): Do not allow void as a parameter type.
23022
23023 2002-10-06  Martin Baulig  <martin@gnome.org>
23024
23025         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
23026         if it's a class type and not a struct.  Fixes #31815.
23027
23028 2002-10-06  Martin Baulig  <martin@gnome.org>
23029
23030         * statement.cs: Reworked the flow analysis code a bit to make it
23031         usable for dead code elimination.
23032
23033 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23034
23035         * cs-parser.jay: allow empty source files. Fixes bug #31781.
23036
23037 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
23038
23039         * expression.cs (ComposedCast.DoResolveType): A quick workaround
23040         to fix the test 165, will investigate deeper.
23041
23042 2002-10-04  Martin Baulig  <martin@gnome.org>
23043
23044         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
23045         finally blocks actually work.
23046         (Try.Resolve): We don't need to create a sibling for `finally' if
23047         there is no finally block.
23048
23049 2002-10-04  Martin Baulig  <martin@gnome.org>
23050
23051         * class.cs (Constructor.Define): The default accessibility for a
23052         non-default constructor is private, not public.
23053
23054 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
23055
23056         * class.cs (Constructor): Make AllowedModifiers public, add
23057         EXTERN.
23058
23059         * cs-parser.jay: Perform the modifiers test here, as the
23060         constructor for the Constructor class usually receives a zero
23061         because of the way we create it (first we create, later we
23062         customize, and we were never checking the modifiers).
23063
23064         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
23065         is a version of LookupTypeReflection that includes the type-name
23066         cache.  This can be used as a fast path for functions that know
23067         the fully qualified name and are only calling into *.GetType() to
23068         obtain a composed type.
23069
23070         This is also used by TypeManager.LookupType during its type
23071         composition.
23072
23073         (LookupType): We now also track the real type name, as sometimes
23074         we can get a quey for the real type name from things like
23075         ComposedCast.  This fixes bug 31422.
23076
23077         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
23078         complete type fullname, it does not have to go through the type
23079         resolution system to obtain the composed version of the type (for
23080         obtaining arrays or pointers).
23081
23082         (Conditional.Emit): Use the EmitBoolExpression to
23083         generate nicer code, as requested by Paolo.
23084
23085         (ArrayCreation.CheckIndices): Use the patch from
23086         hwang_rob@yahoo.ca to validate the array initializers. 
23087
23088 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
23089
23090         * class.cs (ConstructorInitializer.Emit): simplify code by using
23091         Invocation.EmitCall, and at the same time, fix the bugs in calling
23092         parent constructors that took variable arguments. 
23093
23094         * ecore.cs (Expression.ConvertNumericExplicit,
23095         Expression.ImplicitNumericConversion): Remove the code that
23096         manually wrapped decimal (InternalTypeConstructor call is now gone
23097         as well).
23098
23099         * expression.cs (Cast.TryReduce): Also handle decimal types when
23100         trying to perform a constant fold on the type.
23101
23102         * typemanager.cs (IsUnmanagedtype): Partially implemented.
23103
23104         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
23105         that only turned off an error report, and did nothing else. 
23106
23107 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
23108
23109         * driver.cs: Handle and ignore /fullpaths
23110
23111 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
23112
23113         * expression.cs (Binary.ResolveOperator): Catch the case where
23114         DoNumericPromotions returns true, 
23115
23116         (Binary.DoNumericPromotions): Simplify the code, and the tests.
23117
23118 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
23119
23120         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
23121         report error 70.
23122
23123 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
23124
23125         * ecore.cs (ConvertNumericExplicit): It is not enough that the
23126         conversion exists, but it is also required that the conversion be
23127         performed.  This manifested in "(Type64Enum) 2".  
23128
23129         * class.cs (TypeManager.AddMethod): The fix is not to change
23130         AddEnum, because that one was using a fully qualified name (every
23131         DeclSpace derivative does), but to change the AddMethod routine
23132         that was using an un-namespaced name.  This now correctly reports
23133         the duplicated name.
23134
23135         Revert patch until I can properly fix it.  The issue
23136         is that we have a shared Type space across all namespaces
23137         currently, which is wrong.
23138
23139         Options include making the Namespace a DeclSpace, and merge
23140         current_namespace/current_container in the parser.
23141
23142 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
23143
23144         * cs-parser.jay: Improve error reporting when we get a different
23145         kind of expression in local_variable_type and
23146         local_variable_pointer_type. 
23147
23148         Propagate this to avoid missleading errors being reported.
23149
23150         * ecore.cs (ImplicitReferenceConversion): treat
23151         TypeManager.value_type as a target just like object_type.   As
23152         code like this:
23153
23154         ValueType v = 1;
23155
23156         Is valid, and needs to result in the int 1 being boxed before it
23157         is assigned to the value type v.
23158
23159         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
23160         to validate the enumeration name.
23161
23162         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
23163         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
23164         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
23165
23166         * ecore.cs (TryImplicitIntConversion): When doing an
23167         implicit-enumeration-conversion, check if the type is 64-bits and
23168         perform a conversion before passing to EnumConstant.
23169
23170 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
23171
23172         * decl.cs (Error_AmbiguousTypeReference); New routine used to
23173         report ambiguous type references.  Unlike the MS version, we
23174         report what the ambiguity is.   Innovation at work ;-)
23175
23176         (DeclSpace.FindType): Require a location argument to
23177         display when we display an ambiguous error.
23178
23179         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
23180
23181         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
23182
23183         * expression.cs (EmitDynamicInitializers): Apply patch from
23184         hwang_rob@yahoo.ca that fixes the order in which we emit our
23185         initializers. 
23186
23187 2002-09-21  Martin Baulig  <martin@gnome.org>
23188
23189         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
23190         delegate takes no arguments.
23191
23192 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
23193
23194         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
23195         from integers.
23196
23197         * expression.cs: Extract the underlying type.
23198
23199         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
23200
23201         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
23202
23203 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
23204
23205         * class.cs (TypeContainer.DefineType): We can not use the nice
23206         PackingSize with the size set to 1 DefineType method, because it
23207         will not allow us to define the interfaces that the struct
23208         implements.
23209
23210         This completes the fixing of bug 27287
23211
23212         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
23213         means also structs.  This fixes part of the problem. 
23214         (Expresion.ImplicitReferenceConversionExists): ditto.
23215
23216         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
23217         error if there were no errors reported during the type lookup
23218         process, to avoid duplicates or redundant errors.  Without this
23219         you would get an ambiguous errors plus a type not found.  We have
23220         beaten the user enough with the first error.  
23221
23222         (DeclSparce.FindType): Emit a warning if we have an ambiguous
23223         reference. 
23224
23225         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
23226         during the resolution process, stop the lookup, this avoids
23227         repeated error reports (same error twice).
23228
23229         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
23230
23231         * typemanager.cs (LookupType): Redo the type lookup code to match
23232         the needs of System.Reflection.  
23233
23234         The issue is that System.Reflection requires references to nested
23235         types to begin with a "+" sign instead of a dot.  So toplevel
23236         types look like: "NameSpace.TopLevelClass", and nested ones look
23237         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
23238         levels. 
23239
23240 2002-09-19  Martin Baulig  <martin@gnome.org>
23241
23242         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
23243         says that a method always returns or always throws an exception,
23244         don't report the CS0161.
23245
23246         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
23247         set `Returns = new_returns'.
23248
23249 2002-09-19  Martin Baulig  <martin@gnome.org>
23250
23251         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
23252         to an enum constant, check for a CS0176.
23253
23254 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
23255
23256         * class.cs (TypeContainer.CheckPairedOperators): Now we check
23257         for operators that must be in pairs and report errors.
23258
23259         * ecore.cs (SimpleName.DoResolveType): During the initial type
23260         resolution process, when we define types recursively, we must
23261         check first for types in our current scope before we perform
23262         lookups in the enclosing scopes.
23263
23264         * expression.cs (MakeByteBlob): Handle Decimal blobs.
23265
23266         (Invocation.VerifyArgumentsCompat): Call
23267         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
23268         I thought we were supposed to always call this, but there are a
23269         few places in the code where we dont do it.
23270
23271 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
23272
23273         * driver.cs: Add support in -linkres and -resource to specify the
23274         name of the identifier.
23275
23276 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
23277
23278         * ecore.cs (StandardConversionExists): Sync with the conversion
23279         code: allow anything-* to void* conversions.
23280
23281         (FindMostSpecificSource): Use an Expression argument
23282         instead of a Type, because we might be handed over a Literal which
23283         gets a few more implicit conversions that plain types do not.  So
23284         this information was being lost.
23285
23286         Also, we drop the temporary type-holder expression when not
23287         required.
23288
23289 2002-09-17  Martin Baulig  <martin@gnome.org>
23290
23291         * class.cs (PropertyBase.CheckBase): Don't check the base class if
23292         this is an explicit interface implementation.
23293
23294 2002-09-17  Martin Baulig  <martin@gnome.org>
23295
23296         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
23297         different `IndexerName' attributes.
23298
23299         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
23300         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
23301         virtual CommonResolve().
23302
23303 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
23304
23305         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
23306         and convert that to the UnderlyingType.
23307
23308         * statement.cs (Foreach.Resolve): Indexers are just like variables
23309         or PropertyAccesses.
23310
23311         * cs-tokenizer.cs (consume_string): Track line numbers and columns
23312         inside quoted strings, we were not doing this before.
23313
23314 2002-09-16  Martin Baulig  <martin@gnome.org>
23315
23316         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
23317         resolve it.  This is needed for the definite assignment check of the
23318         instance expression, fixes bug #29846.
23319         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
23320
23321 2002-09-16  Nick Drochak  <ndrochak@gol.com>
23322
23323         * parameter.cs: Fix compile error.  Cannot reference static member
23324         from an instance object.  Is this an mcs bug?
23325
23326 2002-09-14  Martin Baulig  <martin@gnome.org>
23327
23328         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
23329         multiple times.  Fixes bug #30295, added test-166.cs.
23330
23331 2002-09-14  Martin Baulig  <martin@gnome.org>
23332
23333         * statement.cs (Block.Emit): Don't emit unreachable code.
23334         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
23335         `break' statements.
23336         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
23337
23338 2002-09-14  Martin Baulig  <martin@gnome.org>
23339
23340         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
23341         is set.
23342
23343 2002-09-14  Martin Baulig  <martin@gnome.org>
23344
23345         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
23346         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
23347         be false on the ms runtime.
23348
23349 2002-09-13  Martin Baulig  <martin@gnome.org>
23350
23351         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
23352         the CS0038 error message.
23353
23354 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
23355
23356         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
23357         constant inside, return it.
23358
23359 2002-09-12  Martin Baulig  <martin@gnome.org>
23360
23361         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
23362         implicit conversion can be done between enum types.
23363
23364         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
23365         check whether an implicit conversion to the current enum's UnderlyingType
23366         exists and report an error if not.
23367
23368         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
23369         without debugging support.
23370
23371         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
23372         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
23373
23374 2002-09-12  Martin Baulig  <martin@gnome.org>
23375
23376         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
23377
23378         * ecore.cs (IMemberExpr.DeclaringType): New property.
23379         (SimpleName.SimpleNameResolve): Check whether we're accessing a
23380         nonstatic member of an outer type (CS0038).
23381
23382 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
23383
23384         * driver.cs: Activate the using-error detector at warning level
23385         4 (at least for MS-compatible APIs).
23386
23387         * namespace.cs (VerifyUsing): Small buglett fix.
23388
23389         * pending.cs (PendingImplementation): pass the container pointer. 
23390
23391         * interface.cs (GetMethods): Allow for recursive definition.  Long
23392         term, I would like to move every type to support recursive
23393         definitions, not the current ordering mechanism that we have right
23394         now.
23395
23396         The situation is this: Attributes are handled before interfaces,
23397         so we can apply attributes to interfaces.  But some attributes
23398         implement interfaces, we will now handle the simple cases
23399         (recursive definitions will just get an error).  
23400
23401         * parameter.cs: Only invalidate types at the end if we fail to
23402         lookup all types.  
23403
23404 2002-09-09  Martin Baulig  <martin@gnome.org>
23405
23406         * ecore.cs (PropertyExpr.Emit): Also check for
23407         TypeManager.system_int_array_get_length so this'll also work when
23408         compiling corlib.  Fixes #30003.
23409
23410 2002-09-09  Martin Baulig  <martin@gnome.org>
23411
23412         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
23413         and throw an exception if we can't get the type's size.  Fixed #30040,
23414         added test-165.cs.
23415
23416 2002-09-09  Martin Baulig  <martin@gnome.org>
23417
23418         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
23419
23420         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
23421         context.  Fixes bug #30027.
23422
23423         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
23424         virtual functions.  Fixes bug #30043, added test-164.cs.
23425
23426 2002-09-08  Ravi Pratap  <ravi@ximian.com>
23427
23428         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
23429
23430 2002-09-08  Nick Drochak  <ndrochak@gol.com>
23431
23432         * driver.cs: Use an object to get the windows codepage since it's not a
23433         static property.
23434
23435 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
23436
23437         * statement.cs (For.Emit): for infinite loops (test == null)
23438         return whether there is a break inside, not always "true".
23439
23440         * namespace.cs (UsingEntry): New struct to hold the name of the
23441         using definition, the location where it is defined, and whether it
23442         has been used in a successful type lookup.
23443
23444         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
23445         strings.
23446
23447         * decl.cs: ditto.
23448
23449 2002-09-06  Ravi Pratap  <ravi@ximian.com>
23450
23451         * attribute.cs : Fix incorrect code which relied on catching
23452         a NullReferenceException to detect a null being passed in
23453         where an object was expected.
23454
23455 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
23456
23457         * statement.cs (Try): flag the catch variable as assigned
23458
23459         * expression.cs (Cast): Simplified by using ResolveType instead of
23460         manually resolving.
23461
23462         * statement.cs (Catch): Fix bug by using ResolveType.
23463
23464 2002-09-06  Ravi Pratap  <ravi@ximian.com>
23465
23466         * expression.cs (BetterConversion): Special case for when we have
23467         a NullLiteral as the argument and we have to choose between string
23468         and object types - we choose string the way csc does.
23469
23470         * attribute.cs (Attribute.Resolve): Catch the
23471         NullReferenceException and report error #182 since the Mono
23472         runtime no more has the bug and having this exception raised means
23473         we tried to select a constructor which takes an object and is
23474         passed a null.
23475
23476 2002-09-05  Ravi Pratap  <ravi@ximian.com>
23477
23478         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
23479         message (1502, 1503) when we can't locate a method after overload
23480         resolution. This is much more informative and closes the bug
23481         Miguel reported.
23482
23483         * interface.cs (PopulateMethod): Return if there are no argument
23484         types. Fixes a NullReferenceException bug.
23485
23486         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
23487         expressions too. Previously we were checking only in one place for
23488         positional arguments leaving out named arguments.
23489
23490         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
23491         type to the enum type is not allowed. Remove code corresponding to
23492         that.
23493
23494         (ConvertNumericExplicit): Allow explicit conversions from
23495         the underlying type to enum type. This precisely follows the spec
23496         and closes a bug filed by Gonzalo.
23497
23498 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23499
23500         * compiler.csproj:
23501         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
23502
23503 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
23504
23505         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
23506         it was important that we stored the right value after the
23507         reduction in `converted'.
23508
23509 2002-09-04  Martin Baulig  <martin@gnome.org>
23510
23511         * location.cs (Location.SymbolDocument): Use full pathnames for the
23512         source files.
23513
23514 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
23515
23516         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
23517         of the expression resolve mechanism, because that will catch the
23518         SimpleName error failures.
23519
23520         (Conditional): If we can not resolve the
23521         expression, return, do not crash.
23522
23523 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23524
23525         * cs-tokenizer.cs:
23526         (location): display token name instead of its number.
23527
23528 2002-08-28  Martin Baulig  <martin@gnome.org>
23529
23530         * expression.cs (Binary.ResolveOperator): Don't silently return
23531         but return an error if an operator cannot be applied between two
23532         enum types.
23533
23534 2002-08-28  Martin Baulig  <martin@gnome.org>
23535
23536         * class.cs (Constructor.Define): Set the permission attributes
23537         correctly instead of making all constructors public.
23538
23539 2002-08-28  Martin Baulig  <martin@gnome.org>
23540
23541         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
23542         for private members before reporting a CS0103; if we find anything,
23543         it's a CS0122.
23544
23545 2002-08-28  Martin Baulig  <martin@gnome.org>
23546
23547         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
23548         to check whether `closure_start_type == closure_invocation_type',
23549         we also need to check whether `m.DeclaringType == closure_invocation_type'
23550         before bypassing the permission checks.  We might be accessing
23551         protected/private members from the base class.
23552         (TypeManager.RealMemberLookup): Only set private_ok if private
23553         members were requested via BindingFlags.NonPublic.
23554
23555         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
23556
23557         * expression.cs (MemberAccess.ResolveMemberAccess): Set
23558         MethodGroupExpr.IsExplicitImpl if appropriate.
23559         (Invocation.DoResolve): Don't report the CS0120 for explicit
23560         interface implementations.
23561
23562 2002-08-27  Martin Baulig  <martin@gnome.org>
23563
23564         * expression.cs (Invocation.DoResolve): If this is a static
23565         method and we don't have an InstanceExpression, we must report
23566         a CS0120.
23567
23568 2002-08-25  Martin Baulig  <martin@gnome.org>
23569
23570         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
23571         `==' between a valuetype and an object.
23572
23573 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
23574
23575         * ecore.cs (TypeExpr): Provide a ToString method.
23576
23577 2002-08-24  Martin Baulig  <martin@gnome.org>
23578
23579         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
23580         now called proggie.dbg and it's a binary file.
23581
23582 2002-08-23  Martin Baulig  <martin@gnome.org>
23583
23584         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
23585
23586 2002-08-23  Martin Baulig  <martin@gnome.org>
23587
23588         * struct.cs (MyStructInfo.ctor): Make this work with empty
23589         structs; it's not allowed to use foreach() on null.
23590
23591 2002-08-23  Martin Baulig  <martin@gnome.org>
23592
23593         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
23594         writer the full pathname of the generated assembly.
23595
23596 2002-08-23  Martin Baulig  <martin@gnome.org>
23597
23598         * statements.cs (FlowBranching.UsageVector.MergeChildren):
23599         A `finally' block never returns or breaks; improved handling of
23600         unreachable code.
23601
23602 2002-08-23  Martin Baulig  <martin@gnome.org>
23603
23604         * statement.cs (Throw.Resolve): Allow `throw null'.
23605
23606 2002-08-23  Martin Baulig  <martin@gnome.org>
23607
23608         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
23609         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
23610         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
23611         MemberLookup would return a wrong event if this is an explicit
23612         interface implementation and the class has an event with the same
23613         name.
23614
23615 2002-08-23  Martin Baulig  <martin@gnome.org>
23616
23617         * statement.cs (Block.AddChildVariableNames): New public method.
23618         (Block.AddChildVariableName): Likewise.
23619         (Block.IsVariableNameUsedInChildBlock): Likewise.
23620         (Block.AddVariable): Check whether a variable name has already
23621         been used in a child block.
23622
23623         * cs-parser.jay (declare_local_variables): Mark all variable names
23624         from the current block as being used in a child block in the
23625         implicit block.
23626
23627 2002-08-23  Martin Baulig  <martin@gnome.org>
23628
23629         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
23630         find the symbol writer.
23631
23632         * driver.cs: csc also allows the arguments to /define being
23633         separated by commas, not only by semicolons.
23634
23635 2002-08-23  Martin Baulig  <martin@gnome.org>
23636
23637         * interface.cs (Interface.GetMembers): Added static check for events.
23638
23639 2002-08-15  Martin Baulig  <martin@gnome.org>
23640
23641         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
23642         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
23643
23644         * ecore.cs (Expression.MemberLookup): Added documentation and explained
23645         why the MethodData.EmitDestructor() change was necessary.
23646
23647 2002-08-20  Martin Baulig  <martin@gnome.org>
23648
23649         * class.cs (TypeContainer.FindMembers): Added static check for events.
23650
23651         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
23652
23653         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
23654         use Type.GetEvents(), not Type.FindMembers().
23655
23656 2002-08-20  Martin Baulig  <martin@gnome.org>
23657
23658         * decl.cs (MemberCache): Added a special method cache which will
23659         be used for method-only searched.  This ensures that a method
23660         search will return a MethodInfo with the correct ReflectedType for
23661         inherited methods.      
23662
23663 2002-08-20  Martin Baulig  <martin@gnome.org>
23664
23665         * decl.cs (DeclSpace.FindMembers): Made this public.
23666
23667 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23668
23669         * delegate.cs: fixed build on windows.
23670         [FIXME:  Filed as bug #29150: MCS must report these errors.]
23671
23672 2002-08-19  Ravi Pratap  <ravi@ximian.com>
23673
23674         * ecore.cs (StandardConversionExists): Return a false
23675         if we are trying to convert the void type to anything else
23676         since that is not allowed.
23677
23678         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
23679         we flag error 70 in the event an event is trying to be accessed
23680         directly from outside the declaring type.
23681
23682 2002-08-20  Martin Baulig  <martin@gnome.org>
23683
23684         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
23685         MemberCache from typemanager.cs to decl.cs.
23686
23687 2002-08-19  Martin Baulig  <martin@gnome.org>
23688
23689         * class.cs (TypeContainer): Implement IMemberContainer.
23690         (TypeContainer.DefineMembers): Create the MemberCache.
23691         (TypeContainer.FindMembers): Do better BindingFlags checking; only
23692         return public members if BindingFlags.Public was given, check
23693         whether members are static.
23694
23695 2002-08-16  Martin Baulig  <martin@gnome.org>
23696
23697         * decl.cs (DeclSpace.Define): Splitted this in Define and
23698         DefineMembers.  DefineMembers is called first and initializes the
23699         MemberCache.
23700
23701         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
23702         DefineMembers() on all our DeclSpaces.
23703
23704         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
23705         but call DefineMembers() on all nested interfaces.  We call their
23706         Define() in our new Define() function.
23707
23708         * interface.cs (Interface): Implement IMemberContainer.
23709         (Interface.Define): Moved all code except the attribute stuf to
23710         DefineMembers().
23711         (Interface.DefineMembers): Initialize the member cache.
23712
23713         * typemanager.cs (IMemberFinder): Removed this interface, we don't
23714         need this anymore since we can use MemberCache.FindMembers directly.
23715
23716 2002-08-19  Martin Baulig  <martin@gnome.org>
23717
23718         * typemanager.cs (MemberCache): When creating the cache for an
23719         interface type, add all inherited members.
23720         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
23721         to `out bool used_cache' and documented it.
23722         (TypeManager.MemberLookup): If we already used the cache in the first
23723         iteration, we don't need to do the interfaces check.
23724
23725 2002-08-19  Martin Baulig  <martin@gnome.org>
23726
23727         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
23728         here from IMemberFinder and don't implement this interface anymore.
23729         (DeclSpace.MemberCache): Moved here from IMemberFinder.
23730
23731         * typemanager.cs (IMemberFinder): This interface is now only used by
23732         classes which actually support the member cache.
23733         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
23734         since we only put DeclSpaces into this Hashtable.
23735         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
23736         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
23737
23738 2002-08-16  Martin Baulig  <martin@gnome.org>
23739
23740         * typemanager.cs (ICachingMemberFinder): Removed.
23741         (IMemberFinder.MemberCache): New property.
23742         (TypeManager.FindMembers): Merged this with RealFindMembers().
23743         This function will never be called from TypeManager.MemberLookup()
23744         so we can't use the cache here, just the IMemberFinder.
23745         (TypeManager.MemberLookup_FindMembers): Check whether the
23746         IMemberFinder has a MemberCache and call the cache's FindMembers
23747         function.
23748         (MemberCache): Rewrote larger parts of this yet another time and
23749         cleaned it up a bit.
23750
23751 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
23752
23753         * driver.cs (LoadArgs): Support quoting.
23754
23755         (Usage): Show the CSC-like command line arguments.
23756
23757         Improved a few error messages.
23758
23759 2002-08-15  Martin Baulig  <martin@gnome.org>
23760
23761         * typemanager.cs (IMemberContainer.Type): New property.
23762         (IMemberContainer.IsInterface): New property.
23763
23764         The following changes are conditional to BROKEN_RUNTIME, which is
23765         defined at the top of the file.
23766
23767         * typemanager.cs (MemberCache.MemberCache): Don't add the base
23768         class'es members, but add all members from TypeHandle.ObjectType
23769         if we're an interface.
23770         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
23771         is the current type.
23772         (MemberCache.CacheEntry.Container): Removed this field.
23773         (TypeHandle.GetMembers): Include inherited members.
23774
23775 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23776
23777         * typemanager.cs: fixed compilation and added a comment on a field that
23778         is never used.
23779
23780 2002-08-15  Martin Baulig  <martin@gnome.org>
23781
23782         * class.cs (ConstructorInitializer.Resolve): In the
23783         Expression.MemberLookup call, use the queried_type as
23784         invocation_type.
23785
23786         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
23787         declared' attribute, it's always true.
23788         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
23789         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
23790         temporary wrapper for FindMembers which tells MemberLookup whether
23791         members from the base classes are included in the return value.
23792         This will go away soon.
23793         (TypeManager.MemberLookup): Use this temporary hack here; once the
23794         new MemberCache is completed, we don't need to do the DeclaredOnly
23795         looping here anymore since the MemberCache will take care of this.
23796         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
23797         (MemberCache): When creating the MemberCache for a class, get
23798         members from the current class and all its base classes.
23799         (MemberCache.CacheEntry.Container): New field.  This is a
23800         temporary hack until the Mono runtime is fixed to distinguish
23801         between ReflectedType and DeclaringType.  It allows us to use MCS
23802         with both the MS runtime and the unfixed Mono runtime without
23803         problems and without accecting performance.
23804         (MemberCache.SearchMembers): The DeclaredOnly looping from
23805         TypeManager.MemberLookup is now done here.      
23806
23807 2002-08-14  Martin Baulig  <martin@gnome.org>
23808
23809         * statement.cs (MyStructInfo.MyStructInfo): Don't call
23810         Type.GetFields on dynamic types but get the fields from the
23811         corresponding TypeContainer.
23812         (MyStructInfo.GetStructInfo): Added check for enum types.
23813
23814         * typemanager.cs (MemberList.IsSynchronized): Implemented.
23815         (MemberList.SyncRoot): Implemented.
23816         (TypeManager.FilterWithClosure): No need to check permissions if
23817         closure_start_type == closure_invocation_type, don't crash if
23818         closure_invocation_type is null.
23819
23820 2002-08-13  Martin Baulig  <martin@gnome.org>
23821
23822         Rewrote TypeContainer.FindMembers to use a member cache.  This
23823         gives us a speed increase of about 35% for the self-hosting MCS
23824         build and of about 15-20% for the class libs (both on GNU/Linux).
23825
23826         * report.cs (Timer): New class to get enhanced profiling.  This
23827         whole class is "TIMER" conditional since it remarkably slows down
23828         compilation speed.
23829
23830         * class.cs (MemberList): New class.  This is an IList wrapper
23831         which we're now using instead of passing MemberInfo[]'s around to
23832         avoid copying this array unnecessarily.
23833         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
23834         (ICachingMemberFinder, IMemberContainer): New interface.
23835         (TypeManager.FilterWithClosure): If `criteria' is null, the name
23836         has already been checked, otherwise use it for the name comparision.
23837         (TypeManager.FindMembers): Renamed to RealMemberFinder and
23838         provided wrapper which tries to use ICachingMemberFinder.FindMembers
23839         if possible.  Returns a MemberList, not a MemberInfo [].
23840         (TypeHandle): New class, implements IMemberContainer.  We create
23841         one instance of this class per type, it contains a MemberCache
23842         which is used to do the member lookups.
23843         (MemberCache): New class.  Each instance of this class contains
23844         all members of a type and a name-based hash table.
23845         (MemberCache.FindMembers): This is our new member lookup
23846         function.  First, it looks up all members of the requested name in
23847         the hash table.  Then, it walks this list and sorts out all
23848         applicable members and returns them.
23849
23850 2002-08-13  Martin Baulig  <martin@gnome.org>
23851
23852         In addition to a nice code cleanup, this gives us a performance
23853         increase of about 1.4% on GNU/Linux - not much, but it's already
23854         half a second for the self-hosting MCS compilation.
23855
23856         * typemanager.cs (IMemberFinder): New interface.  It is used by
23857         TypeManager.FindMembers to call FindMembers on a TypeContainer,
23858         Enum, Delegate or Interface.
23859         (TypeManager.finder_to_member_finder): New PtrHashtable.
23860         (TypeManager.finder_to_container): Removed.
23861         (TypeManager.finder_to_delegate): Removed.
23862         (TypeManager.finder_to_interface): Removed.
23863         (TypeManager.finder_to_enum): Removed.
23864
23865         * interface.cs (Interface): Implement IMemberFinder.
23866
23867         * delegate.cs (Delegate): Implement IMemberFinder.
23868
23869         * enum.cs (Enum): Implement IMemberFinder.
23870
23871         * class.cs (TypeContainer): Implement IMemberFinder.
23872
23873 2002-08-12  Martin Baulig  <martin@gnome.org>
23874
23875         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
23876
23877 2002-08-12  Martin Baulig  <martin@gnome.org>
23878
23879         * ecore.cs (ITypeExpression): New interface for expressions which
23880         resolve to a type.
23881         (TypeExpression): Renamed to TypeLookupExpression.
23882         (Expression.DoResolve): If we're doing a types-only lookup, the
23883         expression must implement the ITypeExpression interface and we
23884         call DoResolveType() on it.
23885         (SimpleName): Implement the new ITypeExpression interface.
23886         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
23887         hack, the situation that we're only looking up types can't happen
23888         anymore when this method is called.  Moved the type lookup code to
23889         DoResolveType() and call it.
23890         (SimpleName.DoResolveType): This ITypeExpression interface method
23891         is now doing the types-only lookup.
23892         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
23893         (ResolveFlags): Added MaskExprClass.
23894
23895         * expression.cs (MemberAccess): Implement the ITypeExpression
23896         interface.
23897         (MemberAccess.DoResolve): Added support for a types-only lookup
23898         when we're called via ITypeExpression.DoResolveType().
23899         (ComposedCast): Implement the ITypeExpression interface.
23900
23901         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
23902         Expression.Resolve() with ResolveFlags.Type instead.
23903
23904 2002-08-12  Martin Baulig  <martin@gnome.org>
23905
23906         * interface.cs (Interface.Define): Apply attributes.
23907
23908         * attribute.cs (Attribute.ApplyAttributes): Added support for
23909         interface attributes.
23910
23911 2002-08-11  Martin Baulig  <martin@gnome.org>
23912
23913         * statement.cs (Block.Emit): Only check the "this" variable if we
23914         do not always throw an exception.
23915
23916         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
23917         whether the property has a set accessor.
23918
23919 2002-08-11  Martin Baulig  <martin@gnome.org>
23920
23921         Added control flow analysis support for structs.
23922
23923         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
23924         with control flow analysis turned off.
23925         (IVariable): New interface.
23926         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
23927         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
23928         (FieldExpr.DoResolve): Resolve the instance expression with flow
23929         analysis turned off and do the definite assignment check after the
23930         resolving when we know what the expression will resolve to.
23931
23932         * expression.cs (LocalVariableReference, ParameterReference):
23933         Implement the new IVariable interface, only call the flow analysis
23934         code if ec.DoFlowAnalysis is true.
23935         (This): Added constructor which takes a Block argument.  Implement
23936         the new IVariable interface.
23937         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
23938         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
23939         This does the definite assignment checks for struct members.
23940
23941         * class.cs (Constructor.Emit): If this is a non-static `struct'
23942         constructor which doesn't have any initializer, call
23943         Block.AddThisVariable() to tell the flow analysis code that all
23944         struct elements must be initialized before control returns from
23945         the constructor.
23946
23947         * statement.cs (MyStructInfo): New public class.
23948         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
23949         argument to this indexer.  If non-zero, check an individual struct
23950         member, not the whole struct.
23951         (FlowBranching.CheckOutParameters): Check struct members.
23952         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
23953         overloaded versions of these methods which take an additional
23954         `int field_idx' argument to check struct members.
23955         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
23956         overloaded versions of these methods which take an additional
23957         `string field_name' argument to check struct member.s
23958         (VariableInfo): Implement the IVariable interface.
23959         (VariableInfo.StructInfo): New public property.  Returns the
23960         MyStructInfo instance of the variable if it's a struct or null.
23961         (Block.AddThisVariable): New public method.  This is called from
23962         Constructor.Emit() for non-static `struct' constructor which do
23963         not have any initializer.  It creates a special variable for the
23964         "this" instance variable which will be checked by the flow
23965         analysis code to ensure that all of the struct's fields are
23966         initialized before control returns from the constructor.
23967         (UsageVector): Added support for struct members.  If a
23968         variable/parameter is a struct with N members, we reserve a slot
23969         in the usage vector for each member.  A struct is considered fully
23970         initialized if either the struct itself (slot 0) or all its
23971         members are initialized.
23972
23973 2002-08-08  Martin Baulig  <martin@gnome.org>
23974
23975         * driver.cs (Driver.MainDriver): Only report an error CS5001
23976         if there were no compilation errors.
23977
23978         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
23979         `UnsafeContext' property to determine whether the parent is in
23980         unsafe context rather than checking the parent's ModFlags:
23981         classes nested in an unsafe class are unsafe as well.
23982
23983 2002-08-08  Martin Baulig  <martin@gnome.org>
23984
23985         * statement.cs (UsageVector.MergeChildren): Distinguish between
23986         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
23987         we return.  Added test17() and test18() to test-154.cs.
23988
23989 2002-08-08  Martin Baulig  <martin@gnome.org>
23990
23991         * typemanager.cs (TypeManager.FilterWithClosure): If we have
23992         Family access, make sure the invoking type isn't a subclass of the
23993         queried type (that'd be a CS1540).
23994
23995         * ecore.cs (Expression.MemberLookup): Added overloaded version of
23996         this method which takes an additional `Type invocation_type'.
23997
23998         * expression.cs (BaseAccess.DoResolve): Use the base type as
23999         invocation and query type.
24000         (MemberAccess.DoResolve): If the lookup failed and we're about to
24001         report a CS0122, try a lookup with the ec.ContainerType - if this
24002         succeeds, we must report a CS1540.
24003
24004 2002-08-08  Martin Baulig  <martin@gnome.org>
24005
24006         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
24007         (MethodGroupExpr): Implement the IMemberExpr interface.
24008
24009         * expression (MemberAccess.ResolveMemberAccess): No need to have
24010         any special code for MethodGroupExprs anymore, they're now
24011         IMemberExprs.   
24012
24013 2002-08-08  Martin Baulig  <martin@gnome.org>
24014
24015         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
24016         Family, FamANDAssem and FamORAssem permissions.
24017         (TypeManager.IsSubclassOrNestedChildOf): New public method.
24018
24019 2002-08-08  Martin Baulig  <martin@gnome.org>
24020
24021         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
24022         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
24023         or loop block.
24024
24025 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
24026
24027         * driver.cs: implemented /resource option to embed managed resources.
24028
24029 2002-08-07  Martin Baulig  <martin@gnome.org>
24030
24031         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
24032         (FieldBase.HasFieldInitializer): New public property.
24033         (FieldBase.GetInitializerExpression): New public method.  Resolves and
24034         returns the field initializer and makes sure it is only resolved once.
24035         (TypeContainer.EmitFieldInitializers): Call
24036         FieldBase.GetInitializerExpression to get the initializer, this ensures
24037         that it isn't resolved multiple times.
24038
24039         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
24040         the resolving process (SimpleName/MemberLookup) that we're currently
24041         emitting a field initializer (which must not access any instance members,
24042         this is an error CS0236).
24043
24044         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
24045         argument, if the `IsFieldInitializer' flag is set, we must report and
24046         error CS0236 and not an error CS0120.   
24047
24048 2002-08-07  Martin Baulig  <martin@gnome.org>
24049
24050         * ecore.cs (IMemberExpr): New public interface.
24051         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
24052         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
24053         if the expression is an IMemberExpr.
24054
24055         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
24056         to be null, implicitly default to `this' if we're non-static in
24057         this case.  Simplified the code a lot by using the new IMemberExpr
24058         interface.  Also fixed bug #28176 here.
24059
24060 2002-08-06  Martin Baulig  <martin@gnome.org>
24061
24062         * cs-parser.jay (SimpleLookup): Removed.  We need to create
24063         ParameterReferences during semantic analysis so that we can do a
24064         type-only search when resolving Cast, TypeOf and SizeOf.
24065         (block): Pass the `current_local_parameters' to the Block's
24066         constructor.
24067
24068         * class.cs (ConstructorInitializer): Added `Parameters parameters'
24069         argument to the constructor.
24070         (ConstructorInitializer.Resolve): Create a temporary implicit
24071         block with the parameters.
24072
24073         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
24074         references here if we aren't doing a type-only search.
24075
24076         * statement.cs (Block): Added constructor which takes a
24077         `Parameters parameters' argument.
24078         (Block.Parameters): New public property.
24079
24080         * support.cs (InternalParameters.Parameters): Renamed `parameters'
24081         to `Parameters' and made it public readonly.
24082
24083 2002-08-06  Martin Baulig  <martin@gnome.org>
24084
24085         * ecore.cs (Expression.Warning): Made this public as well.
24086
24087         * report.cs (Report.Debug): Print the contents of collections.
24088
24089 2002-08-06  Martin Baulig  <martin@gnome.org>
24090
24091         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
24092         used to tell Resolve() which kinds of expressions it may return.
24093         (Expression.Resolve): Added overloaded version of this method which
24094         takes a `ResolveFlags flags' argument.  This can be used to tell
24095         Resolve() which kinds of expressions it may return.  Reports a
24096         CS0118 on error.
24097         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
24098         ResolveFlags.SimpleName.
24099         (Expression.Error118): Added overloaded version of this method which
24100         takes a `ResolveFlags flags' argument.  It uses the flags to determine
24101         which kinds of expressions are allowed.
24102
24103         * expression.cs (Argument.ResolveMethodGroup): New public method.
24104         Resolves an argument, but allows a MethodGroup to be returned.
24105         This is used when invoking a delegate.
24106
24107         * TODO: Updated a bit.
24108
24109 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24110
24111         Fixed compilation with csc.
24112
24113         * ecore.cs: Expression.Error made public. Is this correct? Should
24114         Warning be made public too?
24115
24116         * expression.cs: use ea.Location instead of ea.loc.
24117         [FIXME:  Filed as bug #28607: MCS must report these errors.]
24118
24119 2002-08-06  Martin Baulig  <martin@gnome.org>
24120
24121         * ecore.cs (Expression.loc): Moved the location here instead of
24122         duplicating it in all derived classes.
24123         (Expression.Location): New public property.
24124         (Expression.Error, Expression.Warning): Made them non-static and
24125         removed the location argument.
24126         (Expression.Warning): Added overloaded version which takes an
24127         `int level' argument.
24128         (Expression.Error118): Make this non-static and removed the
24129         expression and location arguments.
24130         (TypeExpr): Added location argument to the constructor.
24131
24132         * expression.cs (StaticCallExpr): Added location argument to
24133         the constructor.
24134         (Indirection, PointerArithmetic): Likewise.
24135         (CheckedExpr, UnCheckedExpr): Likewise.
24136         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
24137         (StringPtr): Likewise.
24138
24139
24140 2002-08-05  Martin Baulig  <martin@gnome.org>
24141
24142         * expression.cs (BaseAccess.DoResolve): Actually report errors.
24143
24144         * assign.cs (Assign.DoResolve): Check whether the source
24145         expression is a value or variable.
24146
24147         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
24148         while resolving the corresponding blocks.
24149
24150         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
24151         an error, don't silently return null.
24152
24153         * statement.cs (Block.AddVariable): Do the error reporting here
24154         and distinguish between CS0128 and CS0136.
24155         (Block.DoResolve): Report all unused labels (warning CS0164).
24156         (LabeledStatement): Pass the location to the constructor.
24157         (LabeledStatement.HasBeenReferenced): New property.
24158         (LabeledStatement.Resolve): Set it to true here.
24159
24160         * statement.cs (Return.Emit): Return success even after reporting
24161         a type mismatch error (CS0126 or CS0127), this is what csc does and
24162         it avoids confusing the users with any consecutive errors.
24163
24164 2002-08-05  Martin Baulig  <martin@gnome.org>
24165
24166         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
24167
24168         * const.cs (Const.LookupConstantValue): Catch circular definitions.
24169
24170         * expression.cs (MemberAccess.DoResolve): Silently return if an
24171         error has already been reported.
24172
24173         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
24174         error has already been reported.
24175
24176 2002-08-05  Martin Baulig  <martin@gnome.org>
24177
24178         * statement.cs (UsageVector): Only initialize the `parameters'
24179         vector if we actually have any "out" parameters.
24180
24181 2002-08-05  Martin Baulig  <martin@gnome.org>
24182
24183         * expression.cs (Binary.ResolveOperator): When combining delegates,
24184         they must have the same type.
24185
24186 2002-08-05  Martin Baulig  <martin@gnome.org>
24187
24188         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
24189         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
24190         work with the ms runtime and we also don't need it: if we're a
24191         PropertyBuilder and not in the `indexer_arguments' hash, then we
24192         are a property and not an indexer.
24193
24194         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
24195         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
24196         since the latter one doesn't work with the ms runtime.
24197
24198 2002-08-03  Martin Baulig  <martin@gnome.org>
24199
24200         Fixed bugs #27998 and #22735.
24201
24202         * class.cs (Method.IsOperator): New public field.
24203         (Method.CheckBase): Report CS0111 if there's already a method
24204         with the same parameters in the current class.  Report CS0508 when
24205         attempting to change the return type of an inherited method.
24206         (MethodData.Emit): Report CS0179 if a method doesn't have a body
24207         and it's not marked abstract or extern.
24208         (PropertyBase): New abstract base class for Property and Indexer.
24209         (PropertyBase.CheckBase): Moved here from Property and made it work
24210         for indexers.
24211         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
24212         the same so we can reuse it there.
24213         (Property, Indexer): Derive from PropertyBase.
24214         (MethodSignature.inheritable_property_signature_filter): New delegate
24215         to find properties and indexers.
24216
24217         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
24218         argument and improved error reporting.
24219
24220         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
24221         EmptyReadOnlyParameters and made it a property.
24222
24223         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
24224         version of this method which takes a `PropertyInfo indexer'.
24225         (TypeManager.RegisterIndexer): New method.
24226
24227         * class.cs: Added myself as author of this file :-)
24228
24229 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24230
24231         * class.cs: fixed compilation on windoze.
24232
24233 2002-08-03  Martin Baulig  <martin@gnome.org>
24234
24235         * interface.cs (Interface.GetInterfaceBases): Check whether all
24236         base interfaces are at least as accessible than the current one.
24237
24238         * class.cs (TypeContainer.GetClassBases): Check whether base types
24239         are at least as accessible than the current type.
24240         (TypeContainer.AsAccessible): Implemented and made non-static.
24241         (MemberBase.CheckParameters): Report errors if the accessibility
24242         checks fail.
24243
24244         * delegate.cs (Delegate.Delegate): The default visibility is
24245         internal for top-level types and private for nested types.
24246         (Delegate.Define): Report errors if the accessibility checks fail.
24247
24248         * enum.cs (Enum.Enum): The default visibility is internal for
24249         top-level types and private for nested types.
24250         (Enum.DefineType): Compute the correct visibility.
24251
24252         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
24253         function which takes a `bool is_toplevel' instead of a TypeContainer.
24254
24255         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
24256         builtin type.
24257
24258 2002-08-02  Martin Baulig  <martin@gnome.org>
24259
24260         * expression.cs (LocalVariableReferenc): Added constructor which
24261         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
24262         (LocalVariableReference.IsReadOnly): New property.
24263         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
24264         variable is readonly, use our own readonly flag to do this; you can
24265         use the new constructor to get a writable reference to a read-only
24266         variable.
24267
24268         * cs-parser.jay (foreach_statement, using_statement): Get a writable
24269         reference to the local variable.
24270
24271 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
24272
24273         * rootcontext.cs (ResolveCore): Also include System.Exception
24274
24275         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
24276         we reach an EmptyStatement.
24277
24278         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
24279         is also fine.
24280
24281         * expression.cs (Binary.ResolveOperator): Check error result in
24282         two places.
24283
24284         use brtrue/brfalse directly and avoid compares to null.
24285
24286 2002-08-02  Martin Baulig  <martin@gnome.org>
24287
24288         * class.cs (TypeContainer.Define): Define all nested interfaces here.
24289         Fixes bug #28407, added test-155.cs.
24290
24291 2002-08-01  Martin Baulig  <martin@gnome.org>
24292
24293         * class.cs (Event.EmitDefaultMethod): Make this work with static
24294         events.  Fixes #28311, added verify-3.cs.
24295
24296 2002-08-01  Martin Baulig  <martin@gnome.org>
24297
24298         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
24299         `is_disposable' fields.
24300         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
24301         `hm.is_disposable' if we're using the collection pattern.
24302         (Foreach.EmitCollectionForeach): Use the correct type for the
24303         enumerator's local variable, only emit the try/finally block if
24304         necessary (fixes #27713).
24305
24306 2002-08-01  Martin Baulig  <martin@gnome.org>
24307
24308         * ecore.cs (Expression.report118): Renamed to Error118 and made
24309         it public static.
24310
24311         * statement.cs (Throw.Resolve): Check whether the expression is of
24312         the correct type (CS0118) and whether the type derives from
24313         System.Exception (CS0155).
24314         (Catch.Resolve): New method.  Do the type lookup here and check
24315         whether it derives from System.Exception (CS0155).
24316         (Catch.CatchType, Catch.IsGeneral): New public properties.
24317
24318         * typemanager.cs (TypeManager.exception_type): Added.
24319
24320 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
24321
24322         * driver.cs: Updated About function.
24323
24324 2002-07-31  Martin Baulig  <martin@gnome.org>
24325
24326         Implemented Control Flow Analysis.
24327
24328         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
24329         (EmitContext.CurrentBranching): Added.
24330         (EmitContext.StartFlowBranching): Added.
24331         (EmitContext.EndFlowBranching): Added.
24332         (EmitContext.KillFlowBranching): Added.
24333         (EmitContext.IsVariableAssigned): Added.
24334         (EmitContext.SetVariableAssigned): Added.
24335         (EmitContext.IsParameterAssigned): Added.
24336         (EmitContext.SetParameterAssigned): Added.
24337         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
24338         Added control flow analysis stuff here.
24339
24340         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
24341         resolve the expression as lvalue.
24342         (LocalVariableReference.DoResolve): Check whether the variable has
24343         already been assigned.
24344         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
24345         the parameter as assigned here.
24346         (ParameterReference.DoResolve): Check whether the parameter has already
24347         been assigned.
24348         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
24349         expression as lvalue.
24350
24351         * statement.cs (FlowBranching): New class for the flow analysis code.
24352         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
24353         (LabeledStatement.IsDefined): New public property.
24354         (LabeledStatement.AddUsageVector): New public method to tell flow
24355         analyis that the label may be reached via a forward jump.
24356         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
24357         flow analysis.
24358         (VariableInfo.Number): New public field.  This is used by flow analysis
24359         to number all locals of a block.
24360         (Block.CountVariables): New public property.  This is the number of
24361         local variables in this block (including the locals from all parent
24362         blocks).
24363         (Block.EmitMeta): Number all the variables.
24364
24365         * statement.cs: Added flow analysis support to all classes.
24366
24367 2002-07-31  Martin Baulig  <martin@gnome.org>
24368
24369         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
24370         To get debugging messages, compile mcs with /define:MCS_DEBUG and
24371         then use this argument.
24372
24373         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
24374
24375         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
24376         use this to specify /define options.
24377
24378 2002-07-29  Martin Baulig  <martin@gnome.org>
24379
24380         * statement.cs (Fixed): Moved all code that does variable lookups
24381         and resolvings from Emit to Resolve.
24382
24383         * statement.cs (For): Moved all code that does variable lookups
24384         and resolvings from Emit to Resolve.
24385
24386         * statement.cs (Using): Moved all code that does variable lookups
24387         and resolvings from Emit to Resolve.
24388
24389 2002-07-29  Martin Baulig  <martin@gnome.org>
24390
24391         * attribute.cs (Attribute.Resolve): Explicitly catch a
24392         System.NullReferenceException when creating the
24393         CustromAttributeBuilder and report a different warning message.
24394
24395 2002-07-29  Martin Baulig  <martin@gnome.org>
24396
24397         * support.cs (ParameterData.ParameterName): Added method to
24398         get the name of a parameter.
24399
24400         * typemanager.cs (TypeManager.IsValueType): New public method.
24401
24402 2002-07-29  Martin Baulig  <martin@gnome.org>
24403
24404         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
24405         is a flag which specifies that it's either ref or out.
24406         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
24407         the out parameter to `out Parameter.Modifier mod', also set the
24408         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
24409
24410         * support.cs (InternalParameters.ParameterModifier): Distinguish
24411         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
24412         Parameter.Modifier.ISBYREF flag if it's either ref or out.
24413
24414         * expression.cs (Argument.GetParameterModifier): Distinguish
24415         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
24416         Parameter.Modifier.ISBYREF flag if it's either ref or out.
24417
24418 2002-07-29  Martin Baulig  <martin@gnome.org>
24419
24420         * expression.cs (ParameterReference.ParameterReference): Added
24421         `Location loc' argument to the constructor.
24422
24423         * cs-parser.jay: Pass location to ParameterReference.
24424
24425 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
24426
24427         * statement.cs (Try): Initialize the location.
24428
24429         * cs-parser.jay: pass location to Try.
24430
24431         * expression.cs (Unary.Reduce): Change the prototype to return
24432         whether a constant fold could be performed or not.  The result is
24433         returned in an out parameters.  In the case of Indirection and
24434         AddressOf, we want to perform the full tests.
24435
24436 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
24437
24438         * statement.cs (Statement.Emit): Flag dead code.
24439
24440 2002-07-27  Andrew Birkett  <andy@nobugs.org>
24441
24442         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
24443
24444 2002-07-27  Martin Baulig  <martin@gnome.org>
24445
24446         * class.cs (MethodData.Define): Put back call to
24447         TypeManager.AddMethod(), accidentally commented this out.
24448
24449         * report.cs (Debug): New public method to print debugging information,
24450         this is `[Conditional ("DEBUG")]'.
24451
24452 2002-07-26  Martin Baulig  <martin@gnome.org>
24453
24454         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
24455         (switch_statement): Push the current_block to the switch_stack and
24456         pop it again when we're done with the switch.
24457         (switch_section): The new block is a child of the current_block.
24458         Fixes bug #24007, added test-152.cs.
24459
24460 2002-07-27  Martin Baulig  <martin@gnome.org>
24461
24462         * expression.cs (Invocation.EmitArguments): When calling a varargs
24463         function with only its fixed arguments, we need to pass an empty
24464         array.
24465
24466 2002-07-27  Martin Baulig  <martin@gnome.org>
24467
24468         Mono 0.13 has been released.
24469
24470 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
24471
24472         * driver.cs: Rename --resource to --linkres, because that is what
24473         we do currently, we dont support --resource yet.
24474
24475         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
24476
24477 2002-07-25  Martin Baulig  <martin@gnome.org>
24478
24479         * class.cs (MethodData): New public class.  This is a `method builder'
24480         class for a method or one accessor of a Property/Indexer/Event.
24481         (MethodData.GetMethodFlags): Moved here from MemberBase.
24482         (MethodData.ApplyAttributes): Likewise.
24483         (MethodData.ApplyObsoleteAttribute): Likewise.
24484         (MethodData.ApplyConditionalAttribute): Likewise.
24485         (MethodData.ApplyDllImportAttribute): Likewise.
24486         (MethodData.CheckAbstractAndExternal): Likewise.
24487         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
24488         (MethodData.Emit): Formerly known as Method.Emit().
24489         (MemberBase): Moved everything which was specific to a single
24490         accessor/method to MethodData.
24491         (Method): Create a new MethodData and call Define() and Emit() on it.
24492         (Property, Indexer, Event): Create a new MethodData objects for each
24493         accessor and call Define() and Emit() on them.
24494
24495 2002-07-25  Martin Baulig  <martin@gnome.org>
24496
24497         Made MethodCore derive from MemberBase to reuse the code from there.
24498         MemberBase now also checks for attributes.
24499
24500         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
24501         (MemberBase.GetMethodFlags): Moved here from class Method and marked
24502         as virtual.
24503         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
24504         `CallingConventions cc' and `Attributes opt_attrs' arguments.
24505         (MemberBase.ApplyAttributes): New virtual method; applies the
24506         attributes to a method or accessor.
24507         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
24508         (MemberBase.ApplyConditionalAttribute): Likewise.
24509         (MemberBase.ApplyDllImportAttribute): Likewise.
24510         (MemberBase.CheckAbstractAndExternal): Likewise.
24511         (MethodCore.ParameterTypes): This is now a property instead of a
24512         method, it's initialized from DoDefineParameters().
24513         (MethodCore.ParameterInfo): Removed the set accessor.
24514         (MethodCore.DoDefineParameters): New protected virtual method to
24515         initialize ParameterTypes and ParameterInfo.
24516         (Method.GetReturnType): We can now simply return the MemberType.
24517         (Method.GetMethodFlags): Override the MemberBase version and add
24518         the conditional flags.
24519         (Method.CheckBase): Moved some code from Define() here, call
24520         DoDefineParameters() here.
24521         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
24522         here to avoid some larger code duplication.
24523         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
24524         ensure that abstract and external accessors don't declare a body.
24525
24526         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
24527         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
24528         lookup in the attribute's parent classes, so we need to abort as soon
24529         as we found the first match.
24530         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
24531         the attribute has no arguments.
24532
24533         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
24534         of a Method.
24535
24536 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24537
24538         * cs-parser.jay: reverted previous patch.
24539
24540 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24541
24542         * cs-parser.jay: fixed bug #22119.
24543
24544 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24545
24546         * attribute.cs: fixed compilation. The error was:
24547         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
24548         be assigned to before control leaves the current method."
24549         [FIXME:  Filed as bug #28186: MCS must report this error.]
24550
24551 2002-07-25  Martin Baulig  <martin@gnome.org>
24552
24553         * attribute.cs (Attribute.Conditional_GetConditionName): New static
24554         method to pull the condition name ouf of a Conditional attribute.
24555         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
24556         the obsolete message and error flag out of an Obsolete attribute.
24557
24558         * class.cs (Method.GetMethodFlags): New public method to get the
24559         TypeManager.MethodFlags for this method.
24560         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
24561         private methods.
24562         (Method.Define): Get and apply the Obsolete and Conditional attributes;
24563         if we're overriding a virtual function, set the new private variable
24564         `parent_method'; call the new TypeManager.AddMethod().
24565
24566         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
24567         the MethodBuilder and the Method in a PtrHashtable.
24568         (TypeManager.builder_to_method): Added for this purpose.
24569         (TypeManager.MethodFlags): Added IsObsoleteError.
24570         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
24571         Obsolete and Conditional arguments in MethodBuilders.  If we discover
24572         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
24573         the message from the attribute.
24574
24575 2002-07-24  Martin Baulig  <martin@gnome.org>
24576
24577         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
24578         preprocessor directives, ensure that the argument to #define/#undef is
24579         exactly one identifier and that it's actually an identifier.
24580
24581         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
24582         did not work ....
24583
24584 2002-07-24  Martin Baulig  <martin@gnome.org>
24585
24586         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
24587         initialize it to TypeManager.object_type in the constructor.
24588         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
24589         of the `hm.get_current' method if we're using the collection pattern.
24590         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
24591         for the explicit conversion to make it work when we're using the collection
24592         pattern and the `Current' property has a different return type than `object'.
24593         Fixes #27713.
24594
24595 2002-07-24  Martin Baulig  <martin@gnome.org>
24596
24597         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
24598         does not match, but don't report any errors.  This method is called in
24599         order for all methods in a MethodGroupExpr until a matching method is
24600         found, so we don't want to bail out if the first method doesn't match.
24601         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
24602         matches, report the 123.  Fixes #28070.
24603
24604 2002-07-24  Martin Baulig  <martin@gnome.org>
24605
24606         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
24607         TypeManager.TypeToCoreType() to the top of the method so the
24608         following equality checks will work.  Fixes #28107.
24609
24610 2002-07-24  Martin Baulig  <martin@gnome.org>
24611
24612         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
24613         operand is of type uint, and the other operand is of type sbyte,
24614         short or int, the operands are converted to type long." -
24615         Actually do what this comment already told us.  Fixes bug #28106,
24616         added test-150.cs.
24617
24618 2002-07-24  Martin Baulig  <martin@gnome.org>
24619
24620         * class.cs (MethodBase): New abstract class.  This is now a base
24621         class for Property, Indexer and Event to avoid some code duplication
24622         in their Define() and DefineMethods() methods.
24623         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
24624         generic methods for Define() and DefineMethods().
24625         (FieldBase): Derive from MemberBase, not MemberCore.
24626         (Property): Derive from MemberBase, not MemberCore.
24627         (Property.DefineMethod): Moved all the code from this method to the
24628         new MethodBase.DefineAccessor(), just call it with appropriate
24629         argumetnts.
24630         (Property.Define): Call the new Property.DoDefine(), this does some
24631         sanity checks and we don't need to duplicate the code everywhere.
24632         (Event): Derive from MemberBase, not MemberCore.
24633         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
24634         accessors, this will also make them work with interface events.
24635         (Indexer): Derive from MemberBase, not MemberCore.
24636         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
24637         (Indexer.Define): Use the new MethodBase functions.
24638
24639         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
24640         argument to the constructor.
24641         (Interface.FindMembers): Added support for interface events.
24642         (Interface.PopluateEvent): Implemented.
24643
24644         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
24645
24646 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
24647
24648         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
24649         but this is required to check for a method name being the same as
24650         the containing class.  
24651
24652         Handle this now.
24653
24654 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24655
24656         * interface.cs: initialize variable.
24657
24658 2002-07-23  Martin Baulig  <martin@gnome.org>
24659
24660         Implemented the IndexerName attribute in interfaces.
24661
24662         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
24663         name if this is an explicit interface implementation.
24664         (Indexer.InterfaceIndexerName): New public variable.  If we're
24665         implementing an interface indexer, this is the IndexerName in that
24666         interface.  Otherwise, it's the IndexerName.
24667         (Indexer.DefineMethod): If we're implementing interface indexer,
24668         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
24669         and Pending.ImplementIndexer methods.
24670         (Indexer.Define): Also define the PropertyBuilder if we're
24671         implementing an interface indexer and this is neither an explicit
24672         interface implementation nor do the IndexerName match the one in
24673         the interface.
24674
24675         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
24676         If a method is defined here, then we always need to create a proxy
24677         for it.  This is used when implementing interface indexers.
24678         (Pending.IsInterfaceIndexer): New public method.
24679         (Pending.ImplementIndexer): New public method.
24680         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
24681         This is used when implementing interface indexers to define a proxy
24682         if necessary.
24683         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
24684         define a proxy if necessary.
24685
24686         * interface.cs (Interface.IndexerName): New public variable.
24687         (Interface.PopulateIndexer): Set the IndexerName.
24688         (Interface.DefineIndexers): New private method.  Populate all the
24689         indexers and make sure their IndexerNames match.
24690
24691         * typemanager.cs (IndexerPropertyName): Added support for interface
24692         indexers.
24693
24694 2002-07-22  Martin Baulig  <martin@gnome.org>
24695
24696         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
24697         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
24698         ret if HasReturnLabel.
24699         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
24700         variables.
24701
24702         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
24703         and set the ec.LoopBeginTryCatchLevel.
24704         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
24705         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
24706         the current ec.TryCatchLevel, the branch goes out of an exception
24707         block.  In this case, we need to use Leave and not Br.
24708
24709 2002-07-22  Martin Baulig  <martin@gnome.org>
24710
24711         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
24712         block unless the block does not always return or it is contained in
24713         another try { ... } catch { ... } block.  Fixes bug #26506.
24714         Added verify-1.cs to the test suite.
24715
24716 2002-07-22  Martin Baulig  <martin@gnome.org>
24717
24718         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
24719         then we do not always return.  Fixes bug #24985.
24720
24721 2002-07-22  Martin Baulig  <martin@gnome.org>
24722
24723         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
24724         lookup on a per-class level; ie. walk up the class hierarchy until we
24725         found at least one applicable method, then choose the best among them.
24726         Fixes bug #24463 and test-29.cs.
24727
24728 2002-07-22  Martin Baulig  <martin@gnome.org>
24729
24730         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
24731         return types of the methods.  The return type is not part of the
24732         signature and we must not check it to make the `new' modifier work.
24733         Fixes bug #27999, also added test-147.cs.
24734         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
24735
24736         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
24737         on the method's return type.
24738
24739 2002-07-21  Martin Baulig  <martin@gnome.org>
24740
24741         * assign.cs: Make this work if the rightmost source is a constant and
24742         we need to do an implicit type conversion.  Also adding a few more tests
24743         to test-38.cs which should have caught this.
24744
24745         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
24746         target in the makefile for this.  The makefile.gnu is primarily intended
24747         for end-users who don't want to debug the compiler.
24748
24749 2002-07-21  Martin Baulig  <martin@gnome.org>
24750
24751         * assign.cs: Improved the Assign class so it can now handle embedded
24752         assignments (X = Y = Z = something).  As a side-effect this'll now also
24753         consume less local variables.  test-38.cs now passes with MCS, added
24754         a few new test cases to that test.
24755
24756 2002-07-20  Martin Baulig  <martin@gnome.org>
24757
24758         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
24759         instructions.  Fixes bug #27977, also added test-146.cs.
24760
24761 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24762
24763         * cs-tokenizer.cs: fixed getHex ().
24764
24765 2002-07-19  Martin Baulig  <martin@gnome.org>
24766
24767         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
24768         not Type.GetType() to lookup the array type.  This is needed when
24769         we're constructing an array of a user-defined type.
24770         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
24771         single-dimensional arrays, but also for single-dimensial arrays of
24772         type decimal.
24773
24774 2002-07-19  Martin Baulig  <martin@gnome.org>
24775
24776         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
24777         this function is called, it's not allowed to share LocalBuilders
24778         among ILGenerators.
24779
24780 2002-07-19  Martin Baulig  <martin@gnome.org>
24781
24782         * expression.cs (Argument.Resolve): Report an error 118 when trying
24783         to pass a type as argument.
24784
24785 2002-07-18  Martin Baulig  <martin@gnome.org>
24786
24787         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
24788         Conv_R_Un for the signed `long' type.
24789
24790 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
24791
24792         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
24793         `expr' for the temporary result, as that will fail if we do
24794         multiple resolves on the same expression.
24795
24796 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
24797
24798         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
24799         ec.TypeContainer for looking up aliases. 
24800
24801         * class.cs (TypeContainer): Remove LookupAlias from here.
24802
24803         * decl.cs (DeclSpace); Move here.
24804
24805 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
24806
24807         * class.cs (FindMembers): Only call filter if the constructor
24808         bulider is not null.
24809
24810         Also handle delegates in `NestedTypes' now.  Now we will perform
24811         type lookups using the standard resolution process.  This also
24812         fixes a bug.
24813
24814         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
24815         This uses Expressions (the limited kind that can be parsed by the
24816         tree) instead of strings.
24817
24818         * expression.cs (ComposedCast.ToString): Implement, used to flag
24819         errors since now we have to render expressions.
24820
24821         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
24822         FormArrayType. 
24823
24824         * ecore.cs (SimpleName.ToString): ditto.
24825
24826         * cs-parser.jay: Instead of using strings to assemble types, use
24827         Expressions to assemble the type (using SimpleName, ComposedCast,
24828         MemberAccess).  This should fix the type lookups in declarations,
24829         because we were using a different code path for this.
24830
24831         * statement.cs (Block.Resolve): Continue processing statements
24832         even when there is an error.
24833
24834 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
24835
24836         * class.cs (Event.Define): Also remove the `remove' method from
24837         the list of pending items.
24838
24839         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
24840         generate more compact code. 
24841
24842 2002-07-17  Martin Baulig  <martin@gnome.org>
24843
24844         * const.cs (Const.LookupConstantValue): Add support for constant
24845         `unchecked' and `checked' expressions.
24846         Also adding test case test-140.cs for this.
24847
24848 2002-07-17  Martin Baulig  <martin@gnome.org>
24849
24850         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
24851         check whether mi.ReturnType implements the IEnumerator interface; the
24852         `==' and the IsAssignableFrom() will fail in this situation.
24853
24854 2002-07-16  Ravi Pratap  <ravi@ximian.com>
24855
24856         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
24857         here too.
24858
24859 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24860
24861         * expression.cs: fixed bug #27811.
24862
24863 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
24864
24865         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
24866         Molaro: when we are a ref, the value already contains a pointer
24867         value, do not take the address of it.
24868
24869 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
24870         * removed mb-parser.jay and mb-tokenizer.cs
24871
24872 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
24873
24874         * expression.cs: check against the building corlib void type.
24875
24876 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
24877
24878         * ecore.cs: fix for valuetype static readonly fields: when 
24879         initializing them, we need their address, not the address of a copy.
24880
24881 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
24882
24883         * typemanager.cs: register also enum_type in corlib.
24884
24885 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
24886
24887         * class.cs: allow calling this (but not base) initializers in structs.
24888
24889 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
24890
24891         * ecore.cs: make sure we compare against the building base types
24892         in GetTypeSize ().
24893
24894 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
24895
24896         * typemanager.cs: fix TypeToCoreType() to handle void and object
24897         (corlib gets no more typerefs after this change).
24898
24899 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
24900
24901         * expression.cs (ArrayCreation.EmitArrayArguments): use
24902         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
24903
24904         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
24905         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
24906         array indexes, the runtime actually forbids them.
24907
24908         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
24909         for array arguments here.
24910
24911         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
24912         instead of the default for ValueTypes.
24913
24914         (New.DoEmit): Use IsValueType instead of
24915         IsSubclassOf (value_type)
24916         (New.DoResolve): ditto.
24917         (Invocation.EmitCall): ditto.
24918
24919         * assign.cs (Assign): ditto.
24920
24921         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
24922         Statements *are* currently doing part of their resolution during
24923         Emit.  
24924
24925         Expressions do always resolve during resolve, but statements are
24926         only required to propagate resolution to their children.
24927
24928 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
24929
24930         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
24931
24932         (LoadAssembly): Do not add the dll if it is already specified
24933
24934         (MainDriver): Add the System directory to the link path at the end,
24935         after all the other -L arguments. 
24936
24937         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
24938         wrong opcode for loading bytes and bools (ldelem.i1 instead of
24939         ldelem.u1) and using the opposite for sbytes.
24940
24941         This fixes Digger, and we can finally run it.
24942
24943         * driver.cs (UnixParseOption): Move the option parsing here.  
24944         (CSCParseOption): Implement CSC-like parsing of options.
24945
24946         We now support both modes of operation, the old Unix way, and the
24947         new CSC-like way.  This should help those who wanted to make cross
24948         platform makefiles.
24949
24950         The only thing broken is that /r:, /reference: and /lib: are not
24951         implemented, because I want to make those have the same semantics
24952         as the CSC compiler has, and kill once and for all the confussion
24953         around this.   Will be doing this tomorrow.
24954
24955         * statement.cs (Unsafe.Resolve): The state is checked during
24956         resolve, not emit, so we have to set the flags for IsUnsfe here.
24957
24958 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
24959
24960         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
24961         not catch the Error_ObjectRefRequired in SimpleName (as it is
24962         possible to have a class/instance variable name that later gets
24963         deambiguated), we have to check this here.      
24964
24965 2002-07-10  Ravi Pratap  <ravi@ximian.com>
24966
24967         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
24968         make static and put into Expression.
24969
24970         (Event.Define): Register the private field of the event with the 
24971         TypeManager so that GetFieldFromEvent can get at it.
24972
24973         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
24974         keep track of the private field associated with an event which
24975         has no accessors.
24976
24977         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
24978         private field.
24979
24980         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
24981
24982 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
24983
24984         * expression.cs (Binary.EmitBranchable): this routine emits the
24985         Binary expression in a branchable context.  This basically means:
24986         we need to branch somewhere, not just get the value on the stack.
24987
24988         This works together with Statement.EmitBoolExpression.
24989
24990         * statement.cs (Statement.EmitBoolExpression): Use
24991         EmitBranchable. 
24992
24993 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
24994
24995         * statement.cs (For): Reduce the number of jumps in loops.
24996
24997         (For): Implement loop inversion for the For statement.
24998
24999         (Break): We can be breaking out of a Try/Catch controlled section
25000         (foreach might have an implicit try/catch clause), so we need to
25001         use Leave instead of Br.
25002
25003         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
25004         now).  If the instace expression supports IMemoryLocation, we use
25005         the AddressOf method from the IMemoryLocation to extract the
25006         address instead of emitting the instance.
25007
25008         This showed up with `This', as we were emitting the instance
25009         always (Emit) instead of the Address of This.  Particularly
25010         interesting when This is a value type, as we dont want the Emit
25011         effect (which was to load the object).
25012
25013 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
25014
25015         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
25016
25017         * statement.cs (Checked): Set the CheckedState during the resolve
25018         process too, as the ConvCast operations track the checked state on
25019         the resolve process, and not emit.
25020
25021         * cs-parser.jay (namespace_member_declaration): Flag that we have
25022         found a declaration when we do.  This is used to flag error 1529
25023
25024         * driver.cs: Report ok when we display the help only.
25025
25026 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
25027
25028         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
25029
25030 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
25031
25032         * cs-tokenizer.cs (define): We also have to track locally the
25033         defines.  AllDefines is just used for the Conditional Attribute,
25034         but we also need the local defines for the current source code. 
25035
25036 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
25037
25038         * statement.cs (While, For, Do): These loops can exit through a
25039         Break statement, use this information to tell whether the
25040         statement is the last piece of code.
25041
25042         (Break): Flag that we break.
25043
25044         * codegen.cs (EmitContexts): New `Breaks' state variable.
25045
25046 2002-07-03  Martin Baulig  <martin@gnome.org>
25047
25048         * class.cs (TypeContainer.MethodModifiersValid): Allow override
25049         modifiers in method declarations in structs.  Otherwise, you won't
25050         be able to override things like Object.Equals().
25051
25052 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
25053
25054         * class.cs (Method, Property, Indexer): Do not allow the public
25055         modifier to be used in explicit interface implementations.
25056
25057         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
25058         override modifiers in method declarations in structs
25059
25060 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
25061
25062         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
25063         integer or real overflow, report an error
25064
25065 2002-07-02  Martin Baulig  <martin@gnome.org>
25066
25067         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
25068         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
25069         to tell the runtime about our newly created System.Object and
25070         System.ValueType types.
25071
25072 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
25073
25074         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
25075         struct instead of Ldarg/Starg.
25076
25077 2002-07-02  Martin Baulig  <martin@gnome.org>
25078
25079         * expression.cs (Indirection.Indirection): Call
25080         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
25081
25082 2002-07-02  Martin Baulig  <martin@gnome.org>
25083
25084         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
25085         ValueType, call TypeManager.TypeToCoreType() on it.
25086         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
25087         the OpCodes.Newarr argument.
25088
25089 2002-07-02  Martin Baulig  <martin@gnome.org>
25090
25091         * expression.cs (Invocation.EmitCall): When compiling corlib,
25092         replace all calls to the system's System.Array type to calls to
25093         the newly created one.
25094
25095         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
25096         System.Array methods.
25097         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
25098         from the system's System.Array type which must be replaced.
25099
25100 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
25101
25102         * typemanager.cs: load unverifiable_code_ctor so we can build
25103         corlib using the correct type. Avoid using GetTypeCode() with
25104         TypeBuilders.
25105         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
25106         TypeManager.object_type to allow building corlib.
25107
25108 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
25109
25110         * ecore.cs: handle System.Enum separately in LoadFromPtr().
25111
25112 2002-07-01  Martin Baulig  <martin@gnome.org>
25113
25114         * class.cs: Make the last change actually work, we need to check
25115         whether `ifaces != null' to avoid a crash.
25116
25117 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
25118
25119         * class.cs: when we build structs without fields that implement
25120         interfaces, we need to add the interfaces separately, since there is
25121         no API to both set the size and add the interfaces at type creation
25122         time.
25123
25124 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
25125
25126         * expression.cs: the dimension arguments to the array constructors
25127         need to be converted if they are a long.
25128
25129 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
25130
25131         * class.cs: don't emit ldarg.0 if there is no parent constructor
25132         (fixes showstopper for corlib).
25133
25134 2002-06-29  Martin Baulig  <martin@gnome.org>
25135
25136         MCS now compiles corlib on GNU/Linux :-)
25137
25138         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
25139         ie. check for MethodImplOptions.InternalCall.
25140
25141         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
25142         and TypeManager.attribute_type are null, so we must explicitly check
25143         whether parent is not null to find out whether it's an attribute type.
25144         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
25145         and SetBuilder, not only if the property is neither abstract nor external.
25146         This is necessary to set the MethodImplOptions on the accessor methods.
25147         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
25148         SetBuilder, see Property.Emit().
25149
25150         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
25151         populate "System.Object", "System.ValueType" and "System.Attribute" since
25152         they've already been populated from BootCorlib_PopulateCoreTypes().
25153
25154 2002-06-29  Martin Baulig  <martin@gnome.org>
25155
25156         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
25157         is the NullLiteral, we also need to make sure that target_type is not
25158         an enum type.   
25159
25160 2002-06-29  Martin Baulig  <martin@gnome.org>
25161
25162         * rootcontext.cs (RootContext.ResolveCore): We must initialize
25163         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
25164         before calling BootstrapCorlib_ResolveDelegate ().
25165
25166 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25167
25168         * statement.cs: fixed build-breaker. All tests passed ok.
25169
25170 2002-06-27  Martin Baulig  <martin@gnome.org>
25171
25172         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
25173         for System.Decimal when compiling corlib.
25174
25175 2002-06-27  Martin Baulig  <martin@gnome.org>
25176
25177         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
25178         switch blocks which contain nothing but a default clause.
25179
25180 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
25181
25182        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
25183
25184 2002-06-27  Martin Baulig  <martin@gnome.org>
25185
25186         * ecore.cs (PropertyExpr.PropertyExpr): Call
25187         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
25188
25189         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
25190         is already a TypeBuilder.
25191
25192 2002-06-27  Martin Baulig  <martin@gnome.org>
25193
25194         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
25195         `target_type == TypeManager.array_type', not IsAssignableFrom() in
25196         the "from an array-type to System.Array" case.  This makes it work
25197         when compiling corlib.
25198
25199 2002-06-27  Martin Baulig  <martin@gnome.org>
25200
25201         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
25202         non-static PropertyExpr, set its InstanceExpression.  This makes
25203         the `ICollection.Count' property work in System/Array.cs.
25204
25205 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
25206
25207         * driver.cs: Made error handling more consistent.  Errors now
25208         tracked by Report class, so many methods which used to return int
25209         now return void.  Main() now prints success/failure and 
25210         errors/warnings message.
25211
25212         Renamed '--probe' compiler argument to '--expect-error'.  Removed
25213         the magic number return values (123 and 124).  Now, if the
25214         expected error occurs, the compiler exits with success (exit value
25215         0).  If the compilation completes without seeing that particular
25216         error, the compiler exits with failure (exit value 1).  The
25217         makefile in mcs/errors has been changed to handle the new behaviour.
25218
25219         * report.cs: Made 'expected error' number a property and renamed
25220         it from 'Probe' to 'ExpectedError'.
25221
25222         * genericparser.cs: Removed error handling support, since it is
25223         now all done by Report class.
25224
25225         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
25226         class, so parse() no longer returns an int.
25227
25228         * namespace.cs: Use Report.Error instead of GenericParser.error
25229
25230 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
25231
25232         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
25233         TypeContainer.AddOperator): At the front of the list put the
25234         explicit implementations, so they get resolved/defined first. 
25235
25236 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
25237
25238         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
25239         interface type is implemented by this TypeContainer.  Used during
25240         explicit interface implementation.
25241
25242         (Property.Define, Indexer.Define, Method.Define): Validate that
25243         the given interface in the explicit implementation is one of the
25244         base classes for the containing type.
25245
25246         Also if we are explicitly implementing an interface, but there is
25247         no match in the pending implementation table, report an error.
25248
25249         (Property.Define): Only define the property if we are
25250         not explicitly implementing a property from an interface.  Use the
25251         correct name also for those properties (the same CSC uses,
25252         although that is really not needed).
25253
25254         (Property.Emit): Do not emit attributes for explicitly implemented
25255         properties, as there is no TypeBuilder.
25256
25257         (Indexer.Emit): ditto.
25258
25259         Hiding then means that we do not really *implement* a pending
25260         implementation, which makes code fail.
25261
25262 2002-06-22  Martin Baulig  <martin@gnome.org>
25263
25264         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
25265         the return value of Object.GetType().  [FIXME: we need to do this whenever
25266         we get a type back from the reflection library].
25267
25268 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
25269
25270         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
25271
25272 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
25273
25274         * attribute.cs: Return null if we can not look up the type.
25275
25276         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
25277         the interface types found.
25278
25279         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
25280         interface types found.
25281
25282         * typemanager.cs (GetInterfaces): Make this routine returns alll
25283         the interfaces and work around the lame differences between
25284         System.Type and System.Reflection.Emit.TypeBuilder in the results
25285         result for GetInterfaces.
25286
25287         (ExpandInterfaces): Given an array of interface types, expand and
25288         eliminate repeated ocurrences of an interface.  This expands in
25289         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
25290         be IA, IB, IC.
25291
25292 2002-06-21  Martin Baulig  <martin@gnome.org>
25293
25294         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
25295         on System.Enum.
25296
25297 2002-06-21  Martin Baulig  <martin@gnome.org>
25298
25299         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
25300         and called with one of the core types, return the corresponding typebuilder for
25301         that type.
25302
25303         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
25304         element type.
25305
25306 2002-06-21  Martin Baulig  <martin@gnome.org>
25307
25308         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
25309         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
25310         (Expression.ConvertReferenceExplicit): Likewise.
25311
25312         * expression.cs (ElementAccess.DoResolve): Likewise.
25313         (ElementAccess.DoResolveLValue): Likewise.
25314
25315 2002-06-10  Martin Baulig  <martin@gnome.org>
25316
25317         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
25318         add the "value" parameter to the parameter list.
25319
25320         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
25321         to our caller.
25322
25323 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
25324
25325         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
25326         the argument to an int, uint, long or ulong, per the spec.  Also
25327         catch negative constants in array creation.
25328
25329 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
25330
25331         * class.cs: do not allow the same interface to appear twice in
25332         the definition list.
25333
25334 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
25335
25336         * ecore.cs: don't use ldlen with System.Array.
25337
25338 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
25339
25340         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
25341
25342 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
25343
25344         * modifiers.cs: produce correct field attributes for protected
25345         internal. Easy fix so miguel can work on ther harder stuff:-)
25346
25347 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
25348
25349         * pending.cs: New file.  Move the code from class.cs here.
25350         Support clearning the pending flag for all methods (when not doing
25351         explicit interface implementation).
25352
25353 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
25354
25355         * rootcontext.cs: added a couple more types needed to bootstrap.
25356
25357 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
25358
25359         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
25360         constructor in the type, instead of any constructor in the type
25361         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
25362         a bug in the Mono runtime when applying the params attribute). 
25363
25364 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
25365         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
25366
25367 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
25368
25369         * expression.cs (Unary.ResolveOperator): Use TypeManager
25370         to resolve the type.
25371
25372 2002-06-13  Ravi Pratap  <ravi@ximian.com>
25373
25374         * cs-parser.jay (enum_member_declaration): Pass in the attributes
25375         attached.
25376
25377         * enum.cs (AddEnumMember): Add support to store the attributes associated 
25378         with each member too.
25379
25380         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
25381         field builders too - this takes care of the enum member case.
25382
25383 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
25384
25385         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
25386         address-of operator on both value types and pointers.
25387
25388 2002-06-10  Martin Baulig  <martin@gnome.org>
25389
25390         * interface.cs (Interface.PopulateIndexer): Add the indexer's
25391         PropertyBuilder to the `property_builders' list.
25392
25393         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
25394         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
25395         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
25396         find any indexers which are inherited from an interface.
25397
25398 2002-06-09  Martin Baulig  <martin@gnome.org>
25399
25400         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
25401         the same type as the constant if necessary.  There's also a test-130.cs
25402         for this.
25403
25404         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
25405
25406         * typemanager.cs (TypeManager.ChangeType): Previously known as
25407         Enum.ChangeEnumType().
25408
25409 2002-06-09  Martin Baulig  <martin@gnome.org>
25410
25411         * expression.cs (Cast.TryReduce): Added support for consts.
25412
25413 2002-06-08  Ravi Pratap  <ravi@ximian.com>
25414
25415         * class.cs (Accessor): Hold attributes information so we can pass
25416         it along.
25417
25418         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
25419         Modify to pass in attributes attached to the methods.
25420
25421         (add_accessor_declaration, remove_accessor_declaration): Ditto.
25422
25423         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
25424         to handle the Accessor kind :-)
25425
25426         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
25427
25428 2002-06-08  Martin Baulig  <martin@gnome.org>
25429
25430         * expression.cs (Unary.TryReduceNegative): Added support for
25431         ULongConstants.
25432
25433 2002-06-08  Martin Baulig  <martin@gnome.org>
25434
25435         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
25436         name can't be found in the `defined_names' - the caller will do a
25437         MemberLookup in this case and thus find methods in System.Enum
25438         such as Enum.IsDefined().
25439
25440 2002-06-08  Martin Baulig  <martin@gnome.org>
25441
25442         * enum.cs (Enum.ChangeEnumType): This is a custom version of
25443         Convert.ChangeType() which works with TypeBuilder created types.
25444         (Enum.LookupEnumValue, Enum.Define): Use it here.
25445
25446         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
25447         `TypeBuilder.BaseType != null' check.
25448         (TypeContainer.FindMembers): Only lookup parent members if we
25449         actually have a parent.
25450         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
25451         (ConstructorInitializer.Resolve): Likewise.
25452
25453         * interface.cs (Interface.FindMembers): Added
25454         `TypeBuilder.BaseType != null' check.
25455
25456         * rootcontext.cs (RootContext.ResolveCore): Added
25457         "System.Runtime.CompilerServices.IndexerNameAttribute" to
25458         classes_second_stage.
25459
25460         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
25461         debug_type and trace_type when compiling with --nostdlib.       
25462
25463 2002-06-07  Martin Baulig  <martin@gnome.org>
25464
25465         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
25466         (AddField): Set it to true when adding a non-static field.
25467         (DefineType): Use `have_nonstatic_fields' to find out whether we
25468         have non-static fields, not `Fields != null'.
25469
25470 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
25471
25472         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
25473         dereferencing a null on the static-field code path)
25474
25475 2002-05-30  Martin Baulig  <martin@gnome.org>
25476
25477         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
25478         to take command line arguments.  Use reflection to call the new
25479         custom `Initialize' function on the symbol writer and pass it the
25480         command line arguments.
25481
25482         * driver.cs (--debug-args): New command line argument to pass command
25483         line arguments to the symbol writer.
25484
25485 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
25486
25487         * assign.cs (DoResolve): Forgot to do the implicit conversion to
25488         the target type for indexers and properties.  Thanks to Joe for
25489         catching this.
25490
25491 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
25492
25493         * typemanager.cs (MethodFlags): returns the method flags
25494         (Obsolete/ShouldIgnore) that control warning emission and whether
25495         the invocation should be made, or ignored. 
25496
25497         * expression.cs (Invocation.Emit): Remove previous hack, we should
25498         not do this on matching a base type, we should do this based on an attribute
25499
25500         Only emit calls to System.Diagnostics.Debug and
25501         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
25502         on the command line.
25503
25504         * rootcontext.cs: Global settings for tracing and debugging.
25505
25506         * cs-tokenizer.cs (define): New utility function to track
25507         defines.   Set the global settings for TRACE and DEBUG if found.
25508
25509 2002-05-25  Ravi Pratap  <ravi@ximian.com>
25510
25511         * interface.cs (Populate*): Pass in the TypeContainer as well as
25512         the DeclSpace as parameters so that we can create EmitContexts and
25513         then use that to apply attributes etc.
25514
25515         (PopulateMethod, PopulateEvent, PopulateProperty)
25516         (PopulateIndexer): Apply attributes everywhere.
25517
25518         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
25519         etc.
25520
25521         (ApplyAttributes): Update accordingly.
25522
25523         We now apply interface attributes for all members too.
25524
25525 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
25526
25527         * class.cs (Indexer.Define); Correctly check if we are explicit
25528         implementation (instead of checking the Name for a ".", we
25529         directly look up if the InterfaceType was specified).
25530
25531         Delay the creation of the PropertyBuilder.
25532
25533         Only create the PropertyBuilder if we are not an explicit
25534         interface implementation.   This means that explicit interface
25535         implementation members do not participate in regular function
25536         lookups, and hence fixes another major ambiguity problem in
25537         overload resolution (that was the visible effect).
25538
25539         (DefineMethod): Return whether we are doing an interface
25540         implementation. 
25541
25542         * typemanager.cs: Temporary hack until we get attributes in
25543         interfaces (Ravi is working on that) and we get IndexerName
25544         support in interfaces.
25545
25546         * interface.cs: Register the indexers as properties.
25547
25548         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
25549         warning, I have verified that this is a bug in the .NET runtime
25550         (JavaScript suffers of the same problem).
25551
25552         * typemanager.cs (MemberLookup): When looking up members for
25553         interfaces, the parent of an interface is the implicit
25554         System.Object (so we succeed in searches of Object methods in an
25555         interface method invocation.  Example:  IEnumerable x;  x.ToString
25556         ()) 
25557
25558 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
25559
25560         * class.cs (Event): Events should also register if they do
25561         implement the methods that an interface requires.
25562
25563         * typemanager.cs (MemberLookup); use the new GetInterfaces
25564         method. 
25565
25566         (GetInterfaces): The code used to lookup interfaces for a type is
25567         used in more than one place, factor it here. 
25568
25569         * driver.cs: Track the errors at the bottom of the file, we kept
25570         on going.
25571
25572         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
25573         instance if the method we are calling is static!
25574
25575 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
25576
25577         * attribute.cs (ApplyAttributes): Make this function filter out
25578         the IndexerName attribute (as that attribute in reality is never
25579         applied) and return the string constant for the IndexerName
25580         attribute. 
25581
25582         * class.cs (TypeContainer.Emit): Validate that all the indexers
25583         have the same IndexerName attribute, and if so, set the
25584         DefaultName attribute on the class. 
25585
25586         * typemanager.cs: The return value might contain other stuff (not
25587         only methods).  For instance, consider a method with an "Item"
25588         property and an Item method.
25589
25590         * class.cs: If there is a problem with the parameter types,
25591         return. 
25592
25593 2002-05-24  Ravi Pratap  <ravi@ximian.com>
25594
25595         * ecore.cs (ImplicitConversionExists): Wrapper function which also
25596         looks at user defined conversion after making a call to 
25597         StandardConversionExists - we need this for overload resolution.
25598
25599         * expression.cs : Update accordingly the various method calls.
25600
25601         This fixes 2 bugs filed against implicit user defined conversions 
25602
25603 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
25604
25605         * statement.cs: Track the result of the assignment.
25606
25607 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
25608
25609         * expression.cs (MemberAccess): Improved error reporting for
25610         inaccessible members.
25611
25612 2002-05-22  Martin Baulig  <martin@gnome.org>
25613
25614         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
25615         itself with debugging support.
25616
25617 2002-05-22  Martin Baulig  <martin@gnome.org>
25618
25619         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
25620         Removed, this isn't needed anymore.
25621
25622 2002-05-20  Martin Baulig  <martin@gnome.org>
25623
25624         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
25625         be underlying type for an enum.
25626
25627 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
25628
25629         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
25630         that splits out the loading of just the core types.
25631
25632         * rootcontext.cs (ResolveCore): Split the struct resolution in
25633         two, so we can load the enumeration underlying types before any
25634         enums are used.
25635
25636         * expression.cs (Is): Bandaid until we fix properly Switch (see
25637         bug #24985 for details).
25638
25639         * typemanager.cs (ImplementsInterface): The hashtable will contain
25640         a null if there are no interfaces implemented.
25641
25642 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
25643
25644         * cs-parser.jay (indexer_declarator): It is fine to have array
25645         parameters
25646
25647 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
25648
25649         * typemanager.cs: (RegisterBuilder): New function used to register
25650         TypeBuilders that implement interfaces.  Since
25651         TypeBuilder.GetInterfaces (as usual) does not work with lame
25652         Reflection.Emit. 
25653         (AddUserType): register interfaces.
25654
25655         (ImplementsInterface): Use the builder_to_ifaces hash if we are
25656         dealing with TypeBuilder.  Also, arrays are showing up as
25657         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
25658         methods can not be invoked on them!
25659
25660         * ecore.cs (ExplicitReferenceConversionExists): Made public.
25661         (ImplicitReferenceConversionExists): Split out from
25662         StandardConversionExists. 
25663
25664         * expression.cs (As): We were only implementing one of the three
25665         cases for the as operator.  We now implement them all.
25666         (Is): Implement the various other cases for Is as well.
25667
25668         * typemanager.cs (CACHE): New define used to control if we want or
25669         not the FindMembers cache.  Seems to have a negative impact on
25670         performance currently
25671
25672         (MemberLookup): Nested types have full acess to
25673         enclosing type members
25674
25675         Remove code that coped with instance/static returns for events, we
25676         now catch this in RealFindMembers.
25677
25678         (RealFindMembers): only perform static lookup if the instance
25679         lookup did not return a type or an event.  
25680
25681 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
25682
25683         * assign.cs (CompoundAssign): We pass more semantic information
25684         now to Compound Assignments than we did before: now we have all
25685         the information at hand, and now we resolve the target *before* we
25686         do the expression expansion, which allows the "CacheValue" method
25687         to have the effect we intended (before, a [x] += 1 would generate
25688         two differen ArrayAccess expressions from the ElementAccess,
25689         during the resolution process).
25690
25691         (CompoundAssign.DoResolve): Resolve target and original_source here.
25692
25693 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
25694
25695         * expression.cs (ArrayAccess): dropped debugging information. 
25696
25697         * typemanager.cs: Small bug fix: I was always returning i_members,
25698         instead of one of i_members or s_members (depending on which had
25699         the content).
25700
25701         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
25702         method is invoked before any code generation takes place, and it
25703         is a mechanism to inform that the expression will be invoked more
25704         than once, and that the method should use temporary values to
25705         avoid having side effects
25706
25707         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
25708
25709         * ecore.cs (Expression.CacheTemporaries): Provide empty default
25710         implementation.
25711
25712         * expression.cs (Indirection, ArrayAccess): Add support for
25713         CacheTemporaries in these two bad boys. 
25714
25715         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
25716         ldobj or ldind_ref.  
25717         (StoreFromPtr): Handle stobj as well.
25718
25719         * expression.cs (UnaryMutator): Share more code.
25720
25721         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
25722         down: I was not tracking the Filter function as well, which
25723         was affecting the results of the cache.
25724
25725 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
25726
25727         * attribute.cs: Remove the hack to handle the CharSet property on
25728         StructLayouts. 
25729
25730 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
25731
25732         * attribute.cs (DoResolve): More uglyness, we now only try to
25733         resolve the attribute partially, to extract the CharSet
25734         information (only if we are a StructLayout attribute).  Otherwise 
25735
25736         (GetExtraTypeInfo): Add some code to conditionally kill in the
25737         future this.   I am more and more convinced that the .NET
25738         framework has special code to handle the attribute setting on
25739         certain elements.
25740
25741         * expression.cs (IsParamsMethodApplicable): Revert my previous
25742         foreach change here, it was wrong.
25743
25744 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
25745
25746         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
25747         (pp_expr): do not abort on unknown input, just return.
25748         (eval): abort if there are pending chars.
25749
25750         * attribute.cs (Attribute.Resolve): Positional parameters are
25751         optional.  Deal with that case.
25752
25753         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
25754         the Ansi/Unicode/Auto information for the type.
25755
25756         (TypeContainer.DefineType): instantiate the EmitContext here, as
25757         we will be using it during the type definition (to resolve
25758         attributes) and during the emit phase.
25759
25760         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
25761         to pull type information out of the attributes
25762
25763         (Attribute.Resolve): track the constructor builder, and allow for
25764         multiple invocations (structs and classes will use this).
25765
25766         * ecore.cs (MemberLookupFinal): new version with all the
25767         parameters customizable.
25768
25769         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
25770         constructors.  Return if the result value is null (as the error
25771         would have been flagged already by MemberLookupFinal)
25772
25773         Do not allow instances of abstract classes or interfaces to be
25774         created.
25775
25776         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
25777         We have to compare the assembly property here when dealing with
25778         FamANDAssem and Assembly access modifiers, because we might be
25779         creating an assembly from *modules* (that means that we are not
25780         getting TypeBuilders for types defined in other modules that are
25781         part of this assembly).
25782
25783         (Method.Emit): If the method is marked abstract and has a body,
25784         emit an error. 
25785
25786         (TypeContainer.DefineMembers): If both the defined member and the
25787         parent name match are methods, then do not emit any warnings: let
25788         the Method.Define routine take care of flagging warnings.  But if
25789         there is a mismatch (method overrides something else, or method is
25790         overriwritten by something, then emit warning).
25791
25792         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
25793         set to null, this means `do not check for the return type on the
25794         signature'. 
25795
25796         (Method.Define): set the return type for the method signature to
25797         null, so that we get methods with the same name and parameters and
25798         different return types.  This is used to flag warning 114 (you are
25799         hiding a method, and you probably want to use the new/override
25800         keywords instead).
25801
25802         * typemanager.cs (MemberLookup): Implemented proper access
25803         control, closing a long standing set of bug reports.  The problem
25804         was that the Framework only has two bits: Public and NonPublic,
25805         and NonPublic includes private and protected methods, but we need
25806         to enforce the FamANDAssem, FamOrAssem and Family. 
25807
25808 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
25809
25810         * statement.cs (GotoCase): Return true: Ammounts to giving up
25811         knowledge on whether we return or not, and letting the other case
25812         be responsible for it.
25813
25814 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
25815
25816         * driver.cs: Do not load directories for each file processed, only
25817         do it if there is a pattern.
25818
25819         * ecore.cs: Report readonly assigns here as well, as we might have
25820         been resolved only by MemberAccess.
25821
25822         (SimpleName.SimpleNameResolve): Also be useful for LValue
25823         resolution.   We need this to propagate assign to local readonly variables
25824
25825         * typemanager.cs: Use a ptrhashtable for the criteria, because we
25826         do not want to reuse potential criteria memory.
25827
25828         * class.cs (MyEventBuilder): Set reflected_type;
25829
25830         * ecore.cs (Constantify): Added support for constifying bools.
25831
25832         (RootContext.LookupType): Added a cache for values looked up in
25833         the declaration space.
25834
25835         * typemanager.cs (FindMembers): Now is a front-end to
25836         RealFindMembers, and provides a two-level hashtable-based cache to
25837         the request.  
25838
25839         15% performance improvement: from 22.5 to 19.2 seconds.
25840
25841         * expression.cs (IsParamsMethodApplicable): use foreach.
25842         (Invocation.DoResolve): ditto.
25843         (New.DoResolve): ditto.
25844         (ArrayCreation.DoResolve): ditto.
25845
25846         * ecore.cs (FindMostEncompassingType): use foreach.
25847
25848         * delegate.cs (NewDelegate.DoResolve): Use foreach
25849
25850         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
25851         (RemoveMethods): use foreach.
25852
25853         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
25854         nested foreach statements instead of for, and also break out of
25855         the inner loop once a match is found.
25856
25857         (Invocation.OverloadResolve): Use foreach, simplify the code. 
25858
25859 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
25860
25861         * cfold.cs (BinaryFold): During an enumeration evaluation context,
25862         we actually unwrap the expression to allow for extra information
25863         to be extracted. 
25864
25865         * expression.cs: Use Shr_Un on unsigned operations. 
25866
25867 2002-05-08  Ravi Pratap  <ravi@ximian.com>
25868
25869         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
25870         applicable operators was not being considered correctly. This closes
25871         the bug Miguel reported.
25872
25873 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
25874
25875         * attribute.cs: check that the type derives from System.Attribute
25876         and report the correct error in that case (moved the duplicate code to
25877         its own method, too).
25878
25879 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
25880
25881         * attribute.cs: lookup attribute type name as the spec says: first the
25882         bare attribute name and then name + "Attribute" (nant compiles with
25883         mcs after this fix).
25884
25885 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
25886
25887         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
25888         Because of the way we parse things, we should try to see if a
25889         UIntConstant can fit in an integer.
25890
25891 2002-05-07  Ravi Pratap  <ravi@ximian.com>
25892
25893         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
25894         when we are in an explicit context.
25895
25896         (ConvertReferenceExplicit): When converting from Iface type S to Class
25897         T make sure the rules are implemented as an OR.
25898
25899         * parameter.cs (ParameterType): Make it a property for now although the
25900         purpose really isn't anything immediate.
25901
25902         * expression.cs (Is*Applicable): Do better checking on the parameter type
25903         of a ref/out parameter. The ones from the system assemblies are already 
25904         marked with the correct type so we don't need to do any correction.
25905
25906         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
25907         the object type is standard too so include that.
25908
25909 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
25910
25911         * ecore.cs (StandardConversionExists): Augment with missing code:
25912         deal with IntConstant, LongConstants and Enumerations.
25913
25914         * assign.cs: Report the error, instead of failing silently
25915
25916         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
25917         typecontainer that they are declared, because the
25918         typecontainer/namespace will have the list of using clauses that
25919         need to be applied.
25920
25921         Assembly Attributes were escaping the normal registration
25922         mechanism. 
25923
25924         (EmitCode): Apply attributes within an EmitContext that represents
25925         the container they were declared on.
25926
25927         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
25928
25929 2002-05-06  Ravi Pratap  <ravi@ximian.com>
25930
25931         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
25932         Revamp completely - make much cleaner as we now operate only
25933         on a set of Types.
25934
25935         (FindMostSpecificSource, FindMostSpecificTarget): New methods
25936         to implement the logic detailed in the spec more correctly.
25937
25938         (UserDefinedConversion): Update accordingly.
25939
25940 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
25941
25942         * statement.cs: Return flow analysis information up.
25943
25944         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
25945         and the default.
25946
25947         (token): Do not consume an extra character before calling
25948         decimal_digits.
25949
25950 2002-05-06  Piers Haken <piersh@friskit.com>
25951
25952         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
25953
25954 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
25955
25956         * class.cs (Constructor.Emit): Set the IsStatic flag in the
25957         EmitContext during the instance constructor initializer
25958         resolution, to stop access to instance variables.
25959
25960         This is mandated by the spec, last paragraph of the `constructor
25961         initializers' section. 
25962
25963 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
25964
25965         * cs-parser.jay, class.cs (Accessor): new class used to represent
25966         an accessor (get or set).  In the past we used `null' to represent
25967         a missing accessor.  But this is ambiguous because there was no
25968         way to tell in abstract indexers/properties if one of them was
25969         specified.
25970
25971         Now there is a way of addressing that.
25972
25973         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
25974         instead of FindMembers.
25975
25976         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
25977         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
25978
25979         * attribute.cs: Treat indexers and properties as the same in terms
25980         of applying attributes
25981
25982         * ecore.cs (FindMostEncompassedType): Use statically initialized
25983         EmptyExpressions()s like we do elsewhere to avoid creating useless
25984         objects (and we take this out of the tight loop).
25985
25986         (GetConversionOperators): Move the code to extract the actual
25987         operators to a separate routine to clean things up.
25988
25989 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
25990
25991         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
25992         events are always registered FieldBuilders.
25993
25994         * class.cs (FieldBase): New class shared by Fields 
25995
25996         * delegate.cs: If we are a toplevel delegate, use our full name.
25997         If we are a nested delegate, then only use our tail name.
25998
25999 2002-05-02  Ravi Pratap  <ravi@ximian.com>
26000
26001         * expression.cs (IsApplicable): Ensure that we add the "&" to
26002         ref/out types before comparing it with the type of the argument.
26003
26004         (IsParamsMethodApplicable): Ditto.
26005
26006         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
26007         silly me ;-)
26008
26009         * delegate.cs : Handle the case when we have more than one applicable
26010         method. Flag an error only when we finish checking all.
26011
26012 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
26013
26014         * expression.cs: Add support for boolean static initializers.
26015
26016 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
26017
26018         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
26019
26020         * parameter.cs (ComputeParameterTypes,
26021         ComputeAndDefineParameterTypes): Better error handling: now we
26022         clear the `types' cache if we fail during any of the type lookups.
26023         We also return the status code correctly to our caller
26024
26025         * delegate.cs: If we fail to define a delegate, abort the extra
26026         steps. 
26027
26028         * expression.cs (Binary.ResolveOperator): for
26029         operator==(object,object) and operator !=(object, object) we also
26030         have to verify that there is an implicit conversion from one to
26031         the other.
26032
26033         (ArrayAccess.DoResolve): Array Access can operate on
26034         non-variables. 
26035
26036 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
26037
26038         * assign.cs (CompoundAssign): A new class used as a "flag" that
26039         the assignment actually is happening as part of a compound
26040         assignment operator.
26041
26042         During compound assignment, a few new rules exist to enable things
26043         like:
26044
26045         byte b |= 1 + 2
26046
26047         From the spec:
26048
26049         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
26050         to the type of x) if y is implicitly convertible to the type of x,
26051         and the operator is a builtin operator and the return type of the
26052         operator is explicitly convertible to the type of x. 
26053
26054         * rootcontext.cs: Reset warning level to 2.  4 catches various
26055         "interesting" features in mcs, we must clean this up at some
26056         point, but currently am trying to kill other bugs ;-)
26057
26058         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
26059         in container classes as well.  
26060
26061         * expression.cs (Binary.ResolveOperator): Handle string case
26062         before anything else (as operator overloading does emit an error
26063         before doing anything else).
26064
26065         This code could go away when we move to a table driven model, but
26066         i could not come up with a good plan last night.
26067
26068 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
26069
26070         * typemanager.cs (CSharpName): reimplementation using regex.
26071         * class.cs: added null check for fields in Emit
26072         * rootcontext.cs: set warninglevel to 4
26073
26074 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
26075
26076         * typemanager.cs (CSharpName): reimplemented with Lupus
26077         suggestion.
26078
26079 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
26080
26081         * statement.cs (If): correclty implement Resolve, because we were
26082         not catching sem errors in there.  The same process is needed
26083         everywhere else. 
26084         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
26085
26086
26087         (Statement.Warning_DeadCodeFound): Factorize code.
26088         (While): Report dead code here too.
26089
26090         (Statement): Added Resolve virtual method to allow
26091         for resolution split from the emit code.
26092
26093 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
26094
26095         * statement.cs (EmitBoolExpression): No longer try to resolve the
26096         expression here.    
26097         (MakeBoolean): New utility function that resolve, implicitly
26098         converts to boolean and tags the expression. 
26099
26100
26101         (If, Do): Implement dead code elimination.
26102         (While): Implement loop inversion
26103
26104         (Do, While, For, If): Resolve the expression prior to calling our
26105         code generation.
26106
26107 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
26108
26109         * class.cs:
26110           - added method Report28 (warning: program has more than one entry point)
26111           - added method IsEntryPoint, implements paragraph 10.1 of the spec
26112           - modified method Method.Define, the part at the end of the method
26113
26114         * rootcontext.cs: added static public Location EntryPointLocation;
26115           
26116         * ../errors/cs0028.cs : Add test case for the above warning.              
26117
26118         * typemanager.cs:
26119           - modified method CSharpName to allow arrays of primitive type to
26120             be printed nicely (e.g. instead of System.Int32[][] it now prints
26121             int[][])
26122           - added method CSharpSignature: returns the signature of a method
26123             in string format to be used in reporting errors, warnings, etc.
26124
26125         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
26126         with String.Empty.
26127
26128 2002-04-26  Ravi Pratap  <ravi@ximian.com>
26129
26130         * delegate.cs (Define): Fix extremely silly bug where I was
26131         setting the type of the 'object' parameter of the BeginInvoke
26132         method to System.IAsyncResult instead of System.Object ;-)
26133
26134 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
26135
26136         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
26137         here. 
26138
26139         (Constructor.Emit): return if we fail to initialize the
26140         constructor.  Another door closed!  
26141
26142         * expression.cs (New.DoResolve): Improve error message (from -6 to
26143         1501).  Use DeclaredOnly lookup to find the exact constructor.
26144
26145         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
26146         loop.  This is useful.
26147
26148         * cs-parser.jay: Adjust the default parameters so that destructors
26149         have the proper signature.
26150
26151 2002-04-26  Martin Baulig  <martin@gnome.org>
26152
26153         * driver.cs (LoadAssembly): If `assembly' contains any characters
26154         which are only valid in path names and not in assembly names
26155         (currently slash, backslash and point), use Assembly.LoadFrom ()
26156         instead of Assembly.Load () on the `assembly' (before iteration
26157         over the link_paths).
26158
26159 2002-04-26  Martin Baulig  <martin@gnome.org>
26160
26161         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
26162
26163 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
26164
26165         * class.cs (Property): use the new typemanager.MemberLookup
26166
26167         (TypeContainer.MemberLookup): Implement using the
26168         TypeManager.MemberLookup now. 
26169
26170         * typemanager.cs: Make MemberLookup a function of the TypeManager,
26171         and return MemberInfos, so that these can be used without an
26172         EmitContext (what we had before).
26173
26174 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
26175
26176         * expression.cs: Fix the case where the argument to params if the
26177         type of the params.  I omitted handling this before.   Fixed
26178
26179 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
26180
26181         * driver.cs: Call BootCorlib_PopulateCoreType
26182
26183         * class.cs (Property.CheckBase): Check for properties only, not
26184         for all members. 
26185
26186         * interface.cs: Temporary hack: try/catch around the
26187         CustomAttributeBuilder, because I am getting an exception that I
26188         do not understand.
26189
26190         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
26191         types whose definitions are required to be there (attributes are
26192         defined before standard types).
26193
26194         Compute definitions as we boot the various types, as they are used
26195         immediately (value_type class will need object_type, but if we do
26196         not initialize object_type, we will pass a null, which will let
26197         the runtime pick the System.Object from the existing corlib, which
26198         is not what we want).
26199
26200 2002-04-22  Patrik Torstensson <totte@labs2.com>
26201
26202         * cs-tokenizer.cs: fixed a number of trim() issues.
26203
26204 2002-04-22  Ravi Pratap  <ravi@ximian.com>
26205
26206         * expression.cs (Argument.Type): Ensure that we return the correct
26207         type when we have out or ref parameters [in which case we 
26208         append a "&"].
26209
26210 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
26211
26212         * class.cs (Property, Indexer): Allow extern modifier in there. 
26213
26214         * typemanager.cs (InitBaseTypes): Initializes object_type and
26215         value_type, since those will be used early on during the bootstrap
26216         process to compile corlib.
26217
26218         (InitCoreTypes): Move code from here to InitBaseTypes.
26219
26220 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
26221
26222         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
26223         single-dimension arrays as using the ldlen opcode.  
26224
26225         Daniel Lewis discovered this optimization.  
26226
26227         * typemanager.cs: Add signature for System.Array::get_Length
26228
26229 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26230
26231         * statement.cs: report the error when the foreach does not apply to an
26232         array nor a collection.
26233
26234 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
26235
26236         * expression.cs: Add implicit conversions to the operator ~.
26237
26238         * constant.cs (DecimalConstant.Emit): Emit decimal value.
26239
26240         * typemanager.cs: Locate the decimal constructor.
26241
26242 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26243
26244         * attribute.cs: use the new property of TypeOf.
26245         * expression.cs: added 'get' property around typearg.
26246
26247         These changes fix a build breaker reported by NickD. Is this the
26248         correct way to fix?  If not, please, revert my changes and make it
26249         work :-).
26250
26251 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
26252
26253         * attribute.cs: Add support for typeof in attribute invocations.
26254         I am not sure that this is right though.
26255
26256 2002-04-14  Duncan Mak  <duncan@ximian.com>
26257
26258         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
26259         Binary.Operator.Division case.
26260
26261 2002-04-13  Ravi Pratap  <ravi@ximian.com>
26262
26263         * class.cs (DefineType): Ensure that we do a proper check on
26264         attribute types and also register it with the TypeManager.
26265
26266         (TypeContainer.Targets): The default for attribute types is
26267         AttributeTargets.All.
26268
26269         * attribute.cs (ApplyAttributes): Registering the attribute type
26270         is done elsewhere, not when we discover we have a Usage attribute.
26271
26272 2002-04-12  Ravi Pratap  <ravi@ximian.com>
26273
26274         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
26275         and get rid of is_delegate parameter.
26276
26277         * everywhere : update.
26278
26279 2002-04-12  Ravi Pratap  <ravi@ximian.com>
26280
26281         * cs-parser.jay (compilation_unit): Revamp completely to use
26282         some new ideas that I got from Rhys' grammar to solve the problems
26283         with assembly level attributes.
26284
26285         (outer_declaration): New grammar production.
26286
26287         (attribute_sections): Add.
26288
26289         (opt_attributes): Base on attribute_sections
26290
26291         (namespace_declaration): Allow opt_attributes to tackle the case
26292         when we have assembly level attributes - we are clever in this
26293         regard now ;-)
26294
26295         * attribute.cs (ApplyAttributes): Do not worry about assembly 
26296         attributes in the non-global context.
26297
26298         * rootcontext.cs (AddGlobalAttributes): Go back to using this
26299         instead of SetGlobalAttributes.
26300
26301         * class.cs, rootcontext.cs : Ensure we define and generate 
26302         attribute types before anything else.
26303
26304         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
26305         and flag the new error -20 for the case when the attribute type
26306         does not have valid targets specified. csc does not catch this.
26307
26308         * ../errors/errors.txt : update for error # -20
26309
26310 2002-04-11  Ravi Pratap  <ravi@ximian.com>
26311
26312         * support.cs (InternalParameters.ParameterModifier): Do some null
26313         checking and return sane values.
26314
26315         * class.cs (Method.Define): If we are a PInvoke method, ensure
26316         that we are static and extern. Report error # 601
26317
26318         * ../errors/cs0601.cs : Add test case for the above error.
26319
26320 2002-04-07  Ravi Pratap  <ravi@ximian.com>
26321
26322         * rootcontext.cs (attribute_types): We need to keep type of
26323         all attribute types separately and emit code for them first.
26324
26325         (RegisterAttribute) : Implement.
26326
26327         * class.cs (DefineType): Check if the current Type is a custom
26328         attribute type and register it accordingly.
26329
26330         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
26331         adding the first attribute twice and rename to
26332
26333         (SetGlobalAttributes): this.
26334
26335         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
26336         lookups.
26337
26338         * attribute.cs (ApplyAttributes): Take an additional argument telling us
26339         if we are processing global arguments. Hmm, I am unsure of this.
26340
26341 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26342
26343         * expression.cs: added static array of strings to avoid calling
26344         Enum.ToString () for Operator in Binary. Significant recover of
26345         performance.
26346
26347 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
26348
26349         * class.cs (FindMembers): Allow the Builders of the various
26350         members to be null.  If they are skip them.  This only happens
26351         during the PInvoke declaration.
26352
26353 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
26354
26355         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
26356         failure, so we do not keep going afterwards.
26357
26358         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
26359         wanted to pass `false' as the `is_delegate' argument.  If this is
26360         the case, why not use delegate_type == null to mean `is_delegate =
26361         false' and anything else as is_delegate = true.
26362
26363 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
26364
26365         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
26366         code for the section, not the beginning of the tests.
26367
26368 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
26369
26370         * cfold.cs: Handle operator + (Enum x, Underlying x) 
26371
26372         * expression.cs (Binary): same.  Warn about errors where we have
26373         Enum/Enum in operator + as well.
26374
26375 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
26376
26377         * statement.cs:
26378                 - added support for switch(bool)
26379                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
26380                 - add TableSwitchEmit() to handle table-based switch statements
26381
26382 2002-04-05  Ravi Pratap  <ravi@ximian.com>
26383
26384         * expression.cs (Invocation.OverloadResolve): Factor out code which
26385         does parameter compatibility checking with arguments so that we can 
26386         re-use the code even from Delegate.VerifyApplicability
26387
26388         (VerifyArgumentsCompat): Move above code here.
26389
26390         * delegate.cs (VerifyApplicability): Get rid of duplicate code
26391         and instead make a call to the above method.
26392
26393 2002-03-31  Ravi Pratap  <ravi@ximian.com>
26394
26395         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
26396         We use it to keep track of classes which are attribute types.
26397
26398 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
26399
26400         * delegate.cs (Delegate.Define): Correctly define the types in the
26401         presence of fixed and array parameters.
26402
26403         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
26404         doing FindMembers.
26405
26406         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
26407         include NonPublic after the first iteration.
26408
26409         * class.cs (Indexer.CheckBase): Only check if both parents are
26410         non-null. 
26411
26412         * cs-parser.jay (accessor_body): If empty, set to null.
26413
26414         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
26415         same code path here to resolve constants names that we did have in
26416         MemberAccess.DoResolve.  There is too much code duplicated here.
26417
26418 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
26419
26420         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
26421
26422         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
26423         to MakeUnionSet.
26424
26425         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
26426         tokens, numbers and strings.
26427
26428         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
26429         parenthesis.
26430
26431         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
26432         asyncronous parameters and the regular parameters.  
26433
26434         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
26435         specify the target directory.
26436
26437         * expression.cs: (This.DoResolve): Simplify
26438         (As.Emit): Optimize, do not generate IsInst if the expression is
26439         always of the given type.
26440
26441         (Is.DoResolve): Bug fix, we were reporting both always/never for
26442         the is expression.
26443
26444         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
26445         creating too many unnecessary arrays.
26446
26447 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
26448
26449         * class.cs (EmitFieldInitializer): Use Assign expression to assign
26450         fields instead of rolling our own initializer.   Takes care of all
26451         implicit conversions, and drops unnecessary static checks/argument.
26452
26453 2002-03-31  Dick Porter  <dick@ximian.com>
26454
26455         * driver.cs: use the GetDirectories() return values properly, and
26456         use "/" as path separator.
26457
26458 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
26459
26460         * expression.cs (Unary): Optimize - - expr into expr.
26461         (Binary): Optimize a + (-b) into a -b.
26462
26463         * codegen.cs (CodeGen): Made all methods static.
26464
26465 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
26466
26467         * rootcontext.cs: 
26468
26469         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
26470         TypeBuilder property.
26471
26472         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
26473         instead. 
26474
26475         * tree.cs: Removed the various RecordXXXX, and replaced with a
26476         single RecordDecl.  Removed all the accessor methods, and just
26477         left a single access point Type 
26478
26479         * enum.cs: Rename DefineEnum to DefineType.
26480
26481         * decl.cs: New abstract method `DefineType' used to unify the
26482         Defines for Enumerations, Interfaces, TypeContainers and
26483         Delegates.
26484
26485         (FindType): Moved LookupInterfaceOrClass here.  Moved the
26486         LookupBaseClasses method that used to live in class.cs and
26487         interface.cs here, and renamed to FindType.
26488
26489         * delegate.cs: Implement DefineType.  Take advantage of the
26490         refactored pattern for locating the parent builder without taking
26491         the parent_builder argument (which we know does not work if we are
26492         nested, and triggering a toplevel definition).
26493
26494 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
26495
26496         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
26497         accessibility of a member has changed during override and report
26498         an error if so.
26499
26500         * class.cs (Method.Define, Property.Define): Only complain on
26501         overrides if the method is private, any other accessibility is
26502         fine (and since we just checked the permission is the same, we are
26503         good to go).
26504
26505         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
26506         and elif are processed always.  The other pre-processing
26507         directives are only processed if we are "taking" the path
26508
26509 2002-03-29  Martin Baulig  <martin@gnome.org>
26510
26511         * class.cs (Method.Emit): Only emit symbolic debugging info if the
26512         current location is not Null.
26513
26514         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
26515         a separate method so we can profile it.
26516
26517         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
26518         `span.Seconds' are just seconds, but no minutes or hours.
26519         (MainDriver): Profile the CodeGen.SaveSymbols calls.
26520
26521 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
26522
26523         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
26524         Remove the gratuitous set of Final:
26525
26526                                 // If an interface implementation, then we can set Final.
26527                                 if (((flags & MethodAttributes.Abstract) == 0) &&
26528                                     implementing.DeclaringType.IsInterface)
26529                                         flags |= MethodAttributes.Final;
26530
26531         I do not know what I was smoking when I used that.
26532
26533
26534         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
26535         step into fixing the name resolution issues for delegates and
26536         unifying the toplevel name resolution.
26537
26538 2002-03-28  Martin Baulig  <martin@gnome.org>
26539
26540         * class.cs (Method.Emit): If we have a symbol writer, call its
26541         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
26542         tell it about the current method.
26543
26544         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
26545         writer that we're going to emit the first byte of IL code for a new
26546         statement (a new source line).
26547         (EmitContext.EmitTopBlock): If we have a symbol writer, call
26548         EmitContext.Mark() before emitting any code.
26549
26550         * location.cs (SymbolDocument): Return null when we're Null.
26551
26552         * statement.cs (Statement): Moved the `Location loc' variable here.
26553         (Statement.EmitBoolExpression): If we have a symbol writer, call
26554         ec.Mark() before emitting any code to tell it that we're at the
26555         beginning of a new statement.
26556         (StatementExpression): Added `Location' argument to the constructor.
26557         (Block): Added public readonly variable `StartLocation' and public
26558         variable `EndLocation'.  The latter is to be set using SetEndLocation().
26559         (Block): Added constructor which takes a start and end location.
26560         (Block.SetEndLocation): New method. This sets the end location.
26561         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
26562         local variables we create.
26563         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
26564         each statement and do also mark the begin and end of the block.
26565
26566         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
26567         tell it the current lexer.Location, use Location.Null for the end of the
26568         block.
26569         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
26570         current block, set its end location using SetEndLocation().
26571         (statement_expression): StatementExpression constructor now takes the
26572         lexer.Location as additional argument.
26573         (for_statement, declare_local_variables): Likewise.
26574         (declare_local_variables): When creating a new implicit block, use the
26575         new Block constructor and pass it the lexer.Location.
26576
26577 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
26578
26579         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
26580         members also on the parent interfaces recursively.
26581
26582 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
26583
26584         * report.cs: Use new formats, since Gonzalo finished the missing
26585         bits. 
26586
26587         * expression.cs (Binary.ResolveOperator): added missing operator|
26588         operator& and operator^ for bool/bool.
26589
26590         * cs-parser.jay: CheckDef now takes a Location argument that is
26591         used to report errors more precisly (instead of reporting the end
26592         of a definition, we try to track something which is a lot closer
26593         to the source of the problem).
26594
26595         * cs-tokenizer.cs: Track global token use, so we can properly flag
26596         the use of #define/#undef after the first token has been seen.
26597
26598         Also, rename the reportXXXX to Error_DescriptiveName
26599
26600         * decl.cs (DeclSpace.IsTopLevel): Move property here from
26601         TypeContainer, so that Enum and Interface can use this too.
26602
26603         * class.cs (TypeContainer.LookupInterfaceOrClass,
26604         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
26605         `builder' argument.  Typically this was used to pass the parent
26606         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
26607         the definition).  
26608
26609         The problem is that a nested class could trigger the definition of
26610         a toplevel class, and the builder would be obviously wrong in that
26611         case. 
26612
26613         So we drop this argument, and we compute dynamically the
26614         TypeBuilder/ModuleBuilder (the correct information was available
26615         to us anyways from DeclSpace.Parent)
26616
26617         * interface.cs (Interface.DefineInterface): Drop builder
26618         parameter cleanup like class.cs
26619
26620         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
26621         like class.cs
26622
26623         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
26624         values. 
26625
26626         (Try.Emit): Propagate the returns value from the statement.
26627
26628         (Return.Emit): Even if we are leavning 
26629
26630         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
26631
26632         * modifiers.cs: Fix the computation of MethodAttributes flags.
26633
26634 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
26635
26636         * driver.cs: allow compilation of files that start with '/'.
26637         Add a default case when checking the argument of --target.
26638
26639 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
26640
26641         * interface.cs: Implement the same search algorithm for types in
26642         the interface code.
26643
26644         * delegate.cs: Do not allow multiple definition.
26645
26646         * Recovered ChangeLog that got accidentally amputated
26647
26648         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
26649
26650         * rootcontext.cs: Load manually enum to allow core classes to
26651         contain enumerations.
26652
26653         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
26654         Update to new static methods in TypeManager.
26655
26656         * typemanager.cs (GetMethod, GetConstructor): Use our
26657         implementation of FindMembers to find the members, since during
26658         corlib compilation, the types are TypeBuilders and GetMethod and
26659         GetConstructor do not work.
26660
26661         Make all methods in TypeManager static.
26662
26663         (InitCodeHelpers): Split the functionality from
26664         the InitCodeTypes function.
26665
26666         * driver.cs: Call InitCodeHelpers after we have populated the
26667         types. 
26668
26669         * cs-parser.jay (delegate_declaration): we did not used to compute
26670         the delegate name correctly for void delegates.
26671
26672 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
26673
26674         * rootcontext.cs (RootContext): Init the interface_resolve_order
26675         and type_container_resolve_order always.
26676
26677         (ResolveCore, BootstrapCorlib_ResolveClass,
26678         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
26679         compiler when compiling with --nostdlib
26680
26681         * class.cs (TypeContainer.DefineType): Check that our parent is
26682         not null.  This test is most important when we are bootstraping
26683         the core types.
26684
26685         * codegen.cs: Split out the symbol writing code.
26686
26687 2002-03-25  Martin Baulig  <martin@gnome.org>
26688
26689         * driver.cs (-g): Made -g an alias for --debug.
26690
26691 2002-03-24  Martin Baulig  <martin@gnome.org>
26692
26693         * codegen.cs (SymbolWriter): New public variable. Returns the
26694         current symbol writer.
26695         (CodeGen): Added `bool want_debugging_support' argument to the
26696          constructor. If true, tell the ModuleBuild that we want debugging
26697         support and ask it for the ISymbolWriter.
26698         (Save): If we have a symbol writer, call it's Close() method after
26699         saving the assembly.
26700
26701         * driver.c (--debug): New command line argument to create a
26702         debugger information file.
26703
26704         * location.cs (SymbolDocument): New public property. Returns an
26705         ISymbolDocumentWriter object for the current source file or null
26706         if we don't have a symbol writer.
26707
26708 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
26709
26710         * driver.cs (LoadAssembly): Correctly return when all the paths
26711         have been tried and not before.
26712
26713         * statement.cs (Switch.Emit): return the actual coverage for this
26714         statement (returns/not-returns)
26715
26716         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
26717         switch of the statement if we are the last switch section.  That
26718         kills two problems: try/catch problems (we used to emit an empty
26719         nop at the end) and switch statements where all branches would
26720         return. 
26721
26722 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
26723
26724         * driver.cs: Add default assemblies (the equivalent to the
26725         Microsoft CSC.RSP file)
26726
26727         * cs-tokenizer.cs: When updating `cols and setting it to zero,
26728         also update tokens_seen and set it to false.
26729
26730         * driver.cs: Implement --recurse for Mike.
26731
26732         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
26733         correctly splitting out the paths.
26734
26735 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
26736
26737         * interface.cs (Interface.PopulateProperty): Instead of using
26738         `parent' as the declaration space for the set parameters, use
26739         `this' 
26740
26741         * support.cs (InternalParameters): InternalParameters constructor
26742         takes a DeclSpace instead of a TypeContainer.
26743
26744         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
26745         types are being initialized, load the address of it before calling
26746         the function.  
26747
26748         (New): Provide a mechanism to disable the generation of local
26749         value type temporaries when the caller will be providing us with
26750         an address to store it.
26751
26752         (ArrayCreation.EmitDynamicInitializers): Use it.
26753
26754 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
26755
26756         * expression.cs (Invocation.EmitArguments): Only probe for array
26757         property if there is more than one argument.  Sorry about that.
26758
26759         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
26760         empty param arrays.
26761
26762         * class.cs (Method.LabelParameters): Fix incorrect code path that
26763         prevented the `ParamArrayAttribute' from being applied to the
26764         params attribute.
26765
26766 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
26767
26768         * support.cs (ReflectionParameters): Correctly compute whether the
26769         last argument is a params array.  Fixes the problem with
26770         string.Split ('a')
26771
26772         * typemanager.cs: Make the assemblies array always be non-null
26773         (empty, but non-null)
26774
26775         * tree.cs (RecordDecl): New function that abstracts the recording
26776         of names.  This reports error 101, and provides a pointer to the
26777         previous declaration.  Fixes a crash in the compiler.
26778
26779         * cs-parser.jay (constructor_declaration): Update to new grammar,
26780         and provide a constructor_body that can be empty.
26781
26782 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
26783
26784         * driver.cs: Add support for --resources.
26785
26786         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
26787         Make all types for the various array helper methods be integer.
26788
26789         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
26790         CheckState to ConvCast.
26791
26792         (ConvCast): Now it takes a `checked' state argument, to avoid
26793         depending on the emit context for the conversion, and just using
26794         the resolve time setting.
26795
26796         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
26797         instead of Invocation.EmitArguments.  We do not emit the original
26798         arguments, instead we emit those which have been converted to
26799         unsigned int expressions.
26800
26801         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
26802
26803         * codegen.cs: ditto.
26804
26805         * expression.cs (LocalVariableReference): Drop the use of the
26806         Store function that depended on the variable index.
26807
26808         * statement.cs (VariableInfo): Drop the `Idx' property from this
26809         class, as this is not taking into account the indexes for
26810         temporaries tat we generate during the execution, getting the
26811         indexes wrong.
26812
26813         * class.cs: First emit class initializers, then call the parent
26814         constructor. 
26815
26816         * expression.cs (Binary): Fix opcode emision.
26817         (UnaryMutator.EmitCode): Support checked code generation
26818
26819         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
26820         matches for events for both the Static and Instance scans,
26821         pointing to the same element.   Fix that.
26822
26823 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
26824
26825         * rootcontext.cs (ResolveTree): Always set the
26826         interface_resolve_order, because nested interfaces will be calling
26827         into us.
26828
26829         * class.cs (GetInterfaceOrClass): Track the same resolution
26830         process used by TypeManager.LookupType.  This fixes the nested
26831         type lookups in class declarations (separate path from
26832         LookupType). 
26833
26834         (TypeContainer.DefineType): Also define nested interfaces.
26835         (TypeContainer.RegisterOrder): New public function used to
26836         register the order in which child interfaces need to be closed.
26837
26838         Nested interfaces need to be closed after their parents have been
26839         created. 
26840
26841         * interface.cs (InterfaceAttr): Put all the logic for computing
26842         the interface attribute here. 
26843
26844         (DefineInterface): Register our interface order with the
26845         RootContext or with the TypeContainer depending on the case.
26846
26847 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
26848
26849         * cs-parser.jay: rework foreach statement to work with the new
26850         changes to the policy on SimpleNames.
26851
26852         * report.cs: support Stacktrace on warnings as well.
26853
26854         * makefile: drop --unsafe and /unsafe from the compile.
26855
26856 2002-03-13  Ravi Pratap  <ravi@ximian.com>
26857
26858         * ecore.cs (StandardConversionExists): Modify to take an Expression
26859         as the first parameter. Ensure we do null -> reference type conversion
26860         checking.
26861
26862         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
26863         temporary Expression objects.
26864
26865 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
26866
26867         * interface.cs: workaround bug in method overloading resolution
26868         (there is already a bugzilla bug for it).
26869
26870 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
26871
26872         We could also solve this problem by having a separate path for
26873         performing type lookups, instead of DoResolve, we could have a
26874         ResolveType entry point, and only participating pieces of the
26875         production (simplename, deref, array) would implement this. 
26876
26877         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
26878         signal SimpleName to only resolve type names and not attempt to
26879         resolve anything else.
26880
26881         * expression.cs (Cast): Set the flag.
26882
26883         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
26884
26885         * class.cs: Only report 108 if there is no `new' modifier.
26886
26887         * cs-parser.jay: rework foreach statement to work with the new
26888         changes to the policy on SimpleNames.
26889
26890         * report.cs: support Stacktrace on warnings as well.
26891
26892         * makefile: drop --unsafe and /unsafe from the compile.
26893
26894 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
26895
26896         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
26897         lookups here, instead of doing that at parse time.  This means
26898         that our grammar will not introduce `LocalVariableReferences' as
26899         expressions at this point.  That solves the problem of code like
26900         this:
26901
26902         class X {
26903            static void Main ()
26904            { int X = 1;
26905             { X x = null }}}
26906
26907         This is only half the fix.  The full fix requires parameters to
26908         also be handled in this way.
26909
26910         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
26911         makes the use more obvious of the DeclSpace.  The
26912         ec.TypeContainer.TypeBuilder is now only used to pull the
26913         TypeBuilder for it.
26914
26915         My theory is that I can get rid of the TypeBuilder completely from
26916         the EmitContext, and have typecasts where it is used (from
26917         DeclSpace to where it matters).  
26918
26919         The only pending problem is that the code that implements Aliases
26920         is on TypeContainer, and probably should go in DeclSpace.
26921
26922         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
26923         lookups here, instead of doing that at parse time.  This means
26924         that our grammar will not introduce `LocalVariableReferences' as
26925         expressions at this point.  That solves the problem of code like
26926         this:
26927
26928         class X {
26929            static void Main ()
26930            { int X = 1;
26931             { X x = null }}}
26932
26933         This is only half the fix.  The full fix requires parameters to
26934         also be handled in this way.
26935
26936         * class.cs (Property.DefineMethod): When implementing an interface
26937         method, set newslot, when implementing an abstract method, do not
26938         set the flag (before we tried never setting it, or always setting
26939         it, which is the difference).
26940         (Indexer.DefineMethod): same.
26941         (Method.DefineMethod): same.
26942
26943         * ecore.cs: Only set the status used flag if we get back a Field.
26944
26945         * attribute.cs: Temporary hack, so Paolo can keep working.
26946
26947 2002-03-08  Ravi Pratap  <ravi@ximian.com>
26948
26949         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
26950         the unmanaged type in the case we have a MarshalAs attribute.
26951
26952         (Resolve): Handle the case when we are parsing the special MarshalAs
26953         attribute [we need to store the unmanaged type to use later]
26954
26955         * typemanager.cs (marshal_as_attr_type): Built in type for the 
26956         MarshalAs Attribute.
26957
26958         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
26959         on parameters and accordingly set the marshalling info.
26960
26961 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
26962
26963         * class.cs: Optimizing slightly by removing redundant code after
26964         we switched to the `NoTypes' return value.
26965         (Property.DefineMethod): use NoTypes here too.
26966
26967         This fixes the bug I introduced in my last batch of changes.
26968
26969 2002-03-05  Ravi Pratap  <ravi@ximian.com>
26970
26971         * tree.cs (RecordEnum): Add. We now keep track of enums too.
26972
26973         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
26974         Enums since those are types too. 
26975
26976         * cs-parser.jay (enum_declaration): Record enums as we parse them.
26977
26978         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
26979         thanks to a call during the lookup process.
26980
26981 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
26982
26983         * statement.cs (Foreach): Lots of work to accomodate a particular
26984         kind of foreach statement that I had not kept in mind.  It is
26985         possible to have foreachs on classes that provide a GetEnumerator
26986         method that return objects that implement the "pattern" for using
26987         a foreach, there is no need to support GetEnumerator
26988         specifically. 
26989
26990         This is needed to compile nant.
26991
26992         * decl.cs: Only report 114 if the member is not `Finalize' and if
26993         the warning level is at least 2.
26994
26995         * class.cs: Moved the compare function from Method to
26996         MethodSignature. 
26997
26998         (MethodSignature.InheritableMemberSignatureCompare): Add new
26999         filter function that is used to extract inheritable methods from a
27000         class. 
27001
27002         (Method.Define): Use the new `inheritable_method_signature_filter'
27003         delegate
27004
27005         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
27006         command. 
27007
27008 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
27009
27010         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
27011
27012         * cs-parser.jay: Add opt_semicolon to the interface declaration.
27013
27014         * expression.cs: Pass location information to
27015         ConvertImplicitStandard. 
27016
27017         * class.cs: Added debugging code to track return values from
27018         interfaces. 
27019
27020 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
27021
27022         * expression.cs (Is.DoResolve): If either side of the `is' is an
27023         interface, do not flag the warning.
27024
27025         * ecore.cs (ImplicitReferenceConversion): We need a separate test
27026         for interfaces
27027
27028         * report.cs: Allow for --fatal to be used with --probe.
27029
27030         * typemanager.cs (NoTypes): Move the definition for the empty Type
27031         array here. 
27032
27033         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
27034         properties. 
27035         (TypeContainer.DefineProxy): New function used to proxy to parent
27036         implementations when implementing interfaces.
27037         (TypeContainer.ParentImplements): used to lookup if our parent
27038         implements a public function that is required by an interface.
27039         (TypeContainer.VerifyPendingMethods): Hook this up.
27040
27041         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
27042         `modules' and `assemblies' arraylists into arrays.  We only grow
27043         these are the very early start up of the program, so this improves
27044         the speedof LookupType (nicely measured).
27045
27046         * expression.cs (MakeByteBlob): Replaced unsafe code with
27047         BitConverter, as suggested by Paolo.
27048
27049         * cfold.cs (ConstantFold.Binary): Special case: perform constant
27050         folding of string concatenation, but if either side is a string,
27051         and the other is not, then return null, and let the runtime use
27052         the concatenation on the string plus the object (using
27053         `Object.ToString'). 
27054
27055 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
27056
27057         Constant Folding has been implemented now.
27058
27059         * expression.cs (Unary.Reduce): Do not throw an exception, catch
27060         the error instead on types that are not supported in one's
27061         complement. 
27062
27063         * constant.cs (Constant and all children): New set of functions to
27064         perform implict and explicit conversions.
27065
27066         * ecore.cs (EnumConstant): Implement the new functions to perform
27067         conversion by proxying to the child expression.
27068
27069         * codegen.cs: (ConstantCheckState): Constant evaluation has its
27070         own separate setting that can not be turned off from the command
27071         line using --unchecked or --checked and is only controlled using
27072         the checked/unchecked statements and expressions.  This setting is
27073         used by the constant folder to flag errors.
27074
27075         * expression.cs (CheckedExpr, UncheckedExpr): Set the
27076         ConstantCheckState as well.   
27077
27078         During Resolve, they also have to flag the state, because the
27079         constant folder runs completely in the Resolve phase.
27080
27081         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
27082         well.
27083
27084 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
27085
27086         * cfold.cs: New file, this file contains the constant folder.
27087
27088         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
27089         argument to track whether we are using the resulting address to
27090         load or store a value and provide better error messages. 
27091
27092         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
27093         new AddressOf arguments.
27094
27095         * statement.cs (Foreach.EmitCollectionForeach): Update
27096
27097         * expression.cs (Argument.Emit): Call AddressOf with proper
27098         arguments to track usage.
27099
27100         (New.DoEmit): Call AddressOf with new arguments.
27101
27102         (Unary.Emit): Adjust AddressOf call.
27103
27104 2002-03-01  Ravi Pratap  <ravi@ximian.com>
27105
27106         * cs-parser.jay (member_access): Change the case for pre-defined types
27107         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
27108         this suggestion.
27109
27110         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
27111         a method body.
27112
27113         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
27114         essentially like methods and apply attributes like MethodImplOptions to them too.
27115
27116         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
27117         not being null.
27118
27119         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
27120         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
27121         is the DeclSpace.
27122
27123         * Update code everywhere accordingly.
27124
27125         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
27126
27127         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
27128
27129 2002-02-28  Ravi Pratap  <ravi@ximian.com>
27130
27131         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
27132         try performing lookups against those instead of jumping straight into using
27133         the 'using' clauses.
27134
27135         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
27136
27137         (LookupType): Perform lookups in implicit parents too.
27138
27139         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
27140         sequence as RootContext.LookupType. 
27141
27142         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
27143         the various cases of namespace lookups into this method.
27144
27145 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
27146
27147         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
27148         in positional arguments)
27149
27150         * class.cs (Operator): Update the AllowedModifiers to contain
27151         extern. 
27152
27153         * cs-parser.jay: Update operator declaration to allow for the
27154         operator body to be empty.
27155
27156         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
27157         values. 
27158
27159 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
27160
27161         * class.cs (Method.Emit): Label parameters.
27162
27163         * driver.cs: Return 1 or 0 as the program exit code.
27164
27165 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
27166
27167         * expression.cs: Special case the `null' object when trying to
27168         auto-compute the type, as anything can be explicitly converted to
27169         that. 
27170
27171         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
27172         spotting this Paolo.
27173
27174         (Expression.ImplicitNumericConversion): Perform comparissions of
27175         the type using the underlying type in the case of an enumeration
27176         rather than using the enumeration type for the compare.
27177
27178         Cope with the underlying == type case, which is not possible to
27179         catch before. 
27180
27181         (Expression.ConvertNumericExplicit): Perform comparissions of
27182         the type using the underlying type in the case of an enumeration
27183         rather than using the enumeration type for the compare.
27184
27185         * driver.cs: If the user does not supply an extension, assume .exe
27186
27187         * cs-parser.jay (if_statement): Rewrote so that we can track the
27188         location for the if statement.
27189
27190         * expression.cs (Binary.ConstantFold): Only concat strings when
27191         the operation is "+", not everything ;-)
27192
27193         * statement.cs (Statement.EmitBoolExpression): Take a location
27194         argument. 
27195         (If, While, Do): Track location.
27196
27197         * expression.cs (Binary.ResolveOperator): In the object + string
27198         case, I was missing a call to ConvertImplicit
27199
27200 2002-02-25  Ravi Pratap  <ravi@ximian.com>
27201
27202         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
27203         Location arguments. Ensure we use RootContext.LookupType to do our work
27204         and not try to do a direct Type.GetType and ModuleBuilder.GetType
27205
27206         * interface.cs (PopulateMethod): Handle the type of the parameter being
27207         null gracefully.
27208
27209         * expression.cs (Invocation.BetterFunction): Handle the case when we 
27210         have a params method with no fixed arguments and a call is made with no
27211         arguments.
27212
27213 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
27214
27215         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
27216         the verbatim-string-literal
27217
27218         * support.cs (InternalParameters.ParameterModifier): handle null
27219         fixed parameters.
27220         (InternalParameters.ParameterType): ditto.
27221
27222         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
27223         duplicating the name of the variable parameter.
27224         (GetParameterByName): Fix bug where we were not looking up array
27225         paramters if they were the only present (thanks Paolo!).
27226         (GetParameterInfo): We only have an empty set of types if both
27227         fixed and array are set to null.
27228         (GetParameterInfo-idx): Handle FixedParameter == null
27229
27230         * cs-parser.jay: Handle the case where there is no catch
27231         statements (missing null test).
27232
27233 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
27234
27235         * driver.cs (MainDriver): Be conservative on our command line
27236         handling.
27237
27238         Catch DirectoryNotFoundException when calling GetFiles.
27239
27240         (SplitPathAndPattern): Used to split the input specification into
27241         a path and a pattern that we can feed to Directory.GetFiles.
27242
27243 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
27244
27245         * statement.cs (Fixed): Implement the last case of the Fixed
27246         statement (string handling).
27247
27248         * expression.cs (StringPtr): New class used to return a char * to
27249         a string;  Used by the Fixed statement.
27250
27251         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
27252
27253         * expression.cs (Binary.ResolveOperator): Remove redundant
27254         MemberLookup pn parent type.
27255         Optimize union call, we do not need a union if the types are the same.
27256         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
27257         type.
27258
27259         Specialize the use of MemberLookup everywhere, instead of using
27260         the default settings. 
27261
27262         (StackAlloc): Implement stackalloc keyword.
27263
27264         * cs-parser.jay: Add rule to parse stackalloc.
27265
27266         * driver.cs: Handle /h, /help, /?
27267
27268         * expression.cs (MakeByteBlob): Removed the hacks we had in place
27269         before we supported unsafe code.
27270
27271         * makefile: add --unsafe to the self compilation of mcs.
27272
27273 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
27274
27275         * expression.cs (PointerArithmetic): New class that is used to
27276         perform pointer arithmetic.
27277         (Binary.Resolve): Handle pointer arithmetic
27278         Handle pointer comparission.
27279         (ArrayPtr): Utility expression class that is used to take the
27280         address of an array.
27281
27282         (ElementAccess): Implement array access for pointers
27283
27284         * statement.cs (Fixed): Implement fixed statement for arrays, we
27285         are missing one more case before we are done.
27286
27287         * expression.cs (Indirection): Implement EmitAssign and set the
27288         ExprClass to Variable.  This allows pointer dereferences to be
27289         treated as variables, and to have values assigned to them.
27290
27291         * ecore.cs (Expression.StoreFromPtr): New utility function to
27292         store values dereferencing.
27293
27294 2002-02-20  Ravi Pratap  <ravi@ximian.com>
27295
27296         * expression.cs (Binary.ResolveOperator): Ensure that we are
27297         not trying to operate on a void type - this fixes the reported
27298         bug.
27299
27300         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
27301         the parent implementation is sealed.
27302
27303         * ../errors/cs0239.cs : Add.
27304
27305         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
27306
27307         * typemanager.cs (unverifiable_code_type): Corresponds to 
27308         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
27309         which have unsafe code in them.
27310
27311         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
27312         unsafe context.
27313
27314 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
27315
27316         * cs-tokenizer.cs: Add support for @"litreal strings"
27317
27318         Make tokenizer accept pre-processor directives
27319         on any column (remove the old C-like limitation). 
27320
27321         * rootcontext.cs (EmitCode): Emit any global attributes.
27322         (AddGlobalAttributes): Used to keep track of assembly attributes. 
27323
27324         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
27325
27326         * cs-parser.jay: Add support for global attributes.  
27327
27328 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
27329
27330         * expression.cs (Indirection): New helper class.  Unary will
27331         create Indirection classes to be able to implement the
27332         IMemoryLocation interface on it.
27333
27334 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
27335
27336         * cs-parser.jay (fixed_statement): reference the right statement.
27337
27338         * statement.cs (Fixed.Emit): Finish implementing the fixed
27339         statement for the &x case.
27340
27341 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
27342
27343         * class.cs (Property.Define, Method.Define): Remove newslot when
27344         `implementing'.  
27345
27346         * modifiers.cs: My use of NewSlot when `Abstract' was set was
27347         wrong.  NewSlot should only be used if the `new' keyword is present.
27348
27349         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
27350         locating our system dir.  Sorry about this.
27351
27352 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
27353
27354         * driver.cs (GetSystemDir): Compute correctly the location of our
27355         system assemblies.  I was using the compiler directory instead of
27356         the library directory.
27357
27358 2002-02-13  Ravi Pratap  <ravi@ximian.com>
27359
27360         * expression.cs (BetterFunction): Put back in what Miguel commented out
27361         since it is the correct fix. The problem is elsewhere ;-)
27362
27363         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
27364         parameters of the parms method are themselves compatible or not !
27365
27366         (StandardConversionExists): Fix very dangerous bug where we were forgetting
27367         to check that a class implements an interface before saying that an implicit
27368         conversion was allowed. Use ImplementsInterface to do the checking.
27369
27370 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
27371
27372         * class.cs (Method.Define): Track whether we are an explicit
27373         implementation or not.  And only call DefineMethodOverride if we
27374         are an explicit implementation.
27375
27376         (Property.DefineMethod): Ditto.
27377
27378 2002-02-11  Ravi Pratap  <ravi@ximian.com>
27379
27380         * expression.cs (BetterFunction): Catch hideous bug which was
27381          preventing us from detecting ambiguous calls due to implicit casts i.e
27382         cs0121.
27383
27384 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
27385
27386         * support.cs (Pair): Remove un-needed method.  I figured why I was
27387         getting the error in cs-parser.jay, the variable in a foreach loop
27388         is readonly, and the compiler does not really treat this as a variable.
27389
27390         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
27391         instead of EQUALS in grammar.  
27392
27393         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
27394
27395         * expression.cs (Unary.DoResolve): Check whether the argument is
27396         managed or not.
27397
27398 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
27399
27400         * support.cs: Api for Pair to set a value.  Despite the fact that
27401         the variables are public the MS C# compiler refuses to compile
27402         code that accesses the field if the variable is part of a foreach
27403         statement. 
27404
27405         * statement.cs (Fixed): Begin implementation of the fixed
27406         statement.
27407
27408         (Block.AddVariable): Return the VariableInfo on success and null
27409         on failure instead of true/false. 
27410
27411         * cs-parser.jay (foreach): Catch errors on variables already
27412         defined (we were ignoring this value before) and properly unwind
27413         the block hierarchy
27414
27415         (fixed_statement): grammar for the fixed statement.
27416
27417 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
27418
27419         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
27420         pointer types to be incretemented.
27421
27422         (SizeOf): Implement.
27423
27424         * cs-parser.jay (pointer_member_access): Implement
27425         expr->IDENTIFIER production.
27426
27427         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
27428         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
27429         on safe contexts.
27430
27431         (Unary): Implement indirection.
27432
27433         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
27434         use in non-unsafe context).
27435
27436         (SimpleName.DoResolve): Check for pointers in field access on safe
27437         contexts. 
27438
27439         (Expression.LoadFromPtr): Factor the load-indirect code in this
27440         function.  This was duplicated in UnboxCast and ParameterReference
27441
27442 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
27443
27444         * expression.cs (ComposedCast): report an error if a pointer cast
27445         is used in a safe region.
27446
27447         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
27448         pointer type casts in unsafe context.
27449
27450         * codegen.cs (EmitContext): Set up IsUnsafe.
27451
27452         * cs-parser.jay (non_expression_type): Add productions for pointer
27453         casts. 
27454
27455         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
27456         code.  We should not use force into static mode if the method is
27457         not virtual.  Fixes bug in MIS
27458
27459         * statement.cs (Do.Emit, While.Emit, For.Emit,
27460         Statement.EmitBoolExpression): Add support to Do and While to
27461         propagate infinite loop as `I do return' semantics.
27462
27463         Improve the For case to also test for boolean constants.
27464
27465         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
27466         to the list of attributes we can add.
27467
27468         Remove `EmitContext' argument.
27469
27470         * class.cs (Method.Define): Apply parameter attributes.
27471         (Constructor.Define): Apply parameter attributes.
27472         (MethodCore.LabelParameters): Move here the core of labeling
27473         parameters. 
27474
27475         * support.cs (ReflectionParameters.ParameterModifier,
27476         InternalParameters.ParameterModifier): Use IsByRef on the type and
27477         only return the OUT bit for these parameters instead of in/out/ref
27478         flags.
27479
27480         This is because I miss-understood things.  The ParameterInfo.IsIn
27481         and IsOut represent whether the parameter has the [In] and [Out]
27482         attributes set.  
27483
27484 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
27485
27486         * ecore.cs (FieldExpr.Emit): Release temporaries.
27487
27488         * assign.cs (LocalTemporary.Release): new function.
27489
27490         * codegen.cs (EmitContext.GetTemporaryStorage,
27491         EmitContext.FreeTemporaryStorage): Rework the way we deal with
27492         temporary storage.  Now we can "put back" localbuilders when we
27493         are done with them
27494
27495 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
27496
27497         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
27498         need to make a copy of the variable to generate verifiable code.
27499
27500 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
27501
27502         * driver.cs: Compute dynamically the system directory.
27503
27504         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
27505         Slower, but more generally useful.  Used by the abstract
27506         registering implementation. 
27507
27508         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
27509         the rules for the special rule on Type/instances.  First check if
27510         we have the same name, and if so, try that special static path
27511         rather than the instance path.
27512
27513 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
27514
27515         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
27516         for, while and if.
27517
27518         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
27519         Enum, ValueType, Delegate or Array for non-corlib compiles.
27520
27521         * cs-tokenizer.cs: Catch long identifiers (645)
27522
27523         * typemanager.cs (IndexerPropetyName): Ravi never tested this
27524         piece of code.
27525
27526         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
27527         fix, we were returning too early, so we were not registering
27528         pending methods from abstract classes.
27529
27530         Do not register pending methods if the class is abstract.
27531
27532         * expression.cs (Conditional.DoResolve): Report circular implicit
27533         conversions when we neecd to compute it for conditional
27534         expressions. 
27535
27536         (Is.DoResolve): If the expression is always of the provided type,
27537         flag warning 183.  If the expression can not ever be of the
27538         provided type flag warning 184.
27539
27540         * class.cs: Catch 169 as well.
27541
27542         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
27543         read. 
27544
27545 2002-01-18  Nick Drochak  <ndrochak@gol.com>
27546
27547         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
27548
27549 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
27550
27551         * interface.cs: (PopulateMethod): Check for pointers being defined
27552         only if the unsafe context is active.
27553         (PopulateProperty): ditto.
27554         (PopulateIndexer): ditto.
27555
27556         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
27557         specified.  If pointers are present, make sure that they are
27558         present in an unsafe context.
27559         (Constructor, Constructor.Define): ditto.
27560         (Field, Field.Define): ditto.
27561         (Property, Property.Define): ditto.
27562         (Event, Event.Define): ditto.
27563
27564         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
27565         hashtable if there are classes or structs defined.
27566
27567         * expression.cs (LocalVariableReference.DoResolve): Simplify this
27568         code, as the constant resolution moved.
27569
27570         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
27571         the metadata, so we can flag error 133. 
27572
27573         * decl.cs (MemberCore.UnsafeOK): New function to test that a
27574         pointer is being declared in an unsafe context.
27575
27576 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
27577
27578         * modifiers.cs (Modifiers.Check): Require a Location argument.
27579         Report error 227 for Unsafe use.
27580
27581         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
27582
27583         * statement.cs (For.Emit): If the test is null, then report that
27584         we do `return', as we wont reach anything afterwards.
27585
27586         (Switch.SwitchGoverningType): Track the expression that matched
27587         the conversion.
27588
27589         * driver.cs: Allow negative numbers as an error code to flag.
27590
27591         * cs-parser.jay: Handle 1551.
27592
27593         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
27594
27595 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
27596
27597         * cs-parser.jay: Report 1518 (type declaration can only contain
27598         class, struct, interface, enum or delegate)
27599
27600         (switch_label): Report 1523 (keywords `case' or `default' must
27601         preced code)
27602
27603         (opt_switch_sections): Report 1522 (empty switch)
27604
27605         * driver.cs: Report 1515 (response file specified multiple times)
27606         Report 1516 (Source file specified multiple times).
27607
27608         * expression.cs (Argument.Resolve): Signal 1510
27609
27610         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
27611         access not allowed in static code)
27612
27613 2002-01-11  Ravi Pratap  <ravi@ximian.com>
27614
27615         * typemanager.cs (IsPointerType): Utility method which we are going
27616         to need a lot.
27617
27618         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
27619         the object type, so we take care of that.
27620
27621         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
27622
27623         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
27624         added to non-params parameters :-)
27625
27626         * typemanager.cs (CSharpName): Include 'void' type too. 
27627
27628         (void_ptr_type): Include in the set of core types.
27629
27630         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
27631         duplicating code.
27632
27633         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
27634         an unsafe context.
27635
27636         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
27637         completely forgotten about it.
27638
27639 2002-01-10  Ravi Pratap  <ravi@ximian.com>
27640
27641         * cs-parser.jay (pointer_type): Add. This begins our implementation
27642         of parsing rules for unsafe code.
27643
27644         (unsafe_statement): Implement.
27645
27646         (embedded_statement): Modify to include the above.
27647
27648         * statement.cs (Unsafe): Implement new class for unsafe blocks.
27649
27650         * codegen.cs (EmitContext.InUnsafe): Add. This determines
27651         if the current context is an unsafe one.
27652
27653         * cs-parser.jay (local_variable_pointer_type): Since local variable types
27654         are handled differently, we need separate rules for them.
27655
27656         (local_variable_declaration): Update to use local_variable_pointer_type
27657         to allow variable declarations of unmanaged pointer types.
27658
27659         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
27660         in unsafe contexts.
27661
27662         * ../errors/cs0214.cs : Add.
27663
27664 2002-01-16  Nick Drochak  <ndrochak@gol.com>
27665
27666         * makefile: remove 'response' file when cleaning.
27667
27668 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
27669
27670         * cs-parser.jay: Report 1524.
27671
27672 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
27673
27674         * typemanager.cs (RegisterMethod): drop checking if we have
27675         registered this from here
27676
27677 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
27678
27679         * class.cs (Method.EmitDestructor): Implement calling our base
27680         destructor. 
27681
27682         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
27683         value of InFinally.
27684
27685         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
27686         this routine and will wrap the call in a try/catch block.  Deal
27687         with the case.
27688
27689 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
27690
27691         * ecore.cs (Expression.MemberLookup): instead of taking a
27692         parameter `same_type' that was used to tell whether we could
27693         access private members we compute our containing type from the
27694         EmitContext.
27695
27696         (FieldExpr): Added partial support for volatile fields.  This does
27697         not work for volatile fields exposed from assemblies, as I can not
27698         figure out how to extract the modreq from it.
27699
27700         Updated all the source files to use this.
27701
27702         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
27703         because it is referenced by MemberLookup very often. 
27704
27705 2002-01-09  Ravi Pratap  <ravi@ximian.com>
27706
27707         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
27708         TypeBuilder.GetCustomAttributes to retrieve what we need.
27709
27710         Get rid of redundant default_member_attr_type as this is the same as
27711         default_member_type which already exists.
27712
27713         * interface.cs, attribute.cs : Update accordingly.
27714
27715 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
27716
27717         * typemanager.cs: Enable IndexerPropertyName again.  It does not
27718         work for TYpeBuilders though.  Ravi, can you please fix this?
27719
27720         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
27721
27722         * expression.cs (Argument.Emit): Handle the case of ref objects
27723         being passed to ref functions;  
27724
27725         (ParameterReference.EmitLoad): Loads the content of the pointer
27726         without dereferencing.
27727
27728 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
27729
27730         * cs-tokenizer.cs: Implemented the pre-processing expressions.
27731
27732 2002-01-08  Ravi Pratap  <ravi@ximian.com>
27733
27734         * class.cs (Indexer.DefineMethod): Incorporate the interface
27735         type in the name of the method if we are doing explicit interface
27736         implementation.
27737
27738         * expression.cs (ConversionExists): Remove as it is completely obsolete.
27739
27740         (BetterConversion): Fix extremely trivial bug where we were referring to
27741         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
27742         again !
27743
27744         * ../errors/bug16.cs : Add although we have fixed it.
27745
27746 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
27747
27748         * expression.cs (BaseIndexer): Begin implementation.
27749
27750         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
27751
27752         * cs-parser.jay (indexer_declarator): Use qualified_identifier
27753         production directly to remove a shift/reduce, and implement
27754         explicit interface implementation.
27755
27756         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
27757         after a floating point suffix.
27758
27759         * expression.cs (DoNumericPromotions): Improved the conversion for
27760         uint/uint.  If we have a constant, we avoid doing a typecast to a
27761         larger type.
27762
27763         * class.cs (Indexer): Implement explicit interface implementation
27764         for indexers.
27765
27766 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
27767
27768         * class.cs: make the default instance constructor public and hidebysig.
27769
27770 2001-01-03  Ravi Pratap  <ravi@ximian.com>
27771
27772         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
27773         so we can call it from elsewhere.
27774
27775         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
27776         we emit it internally if the class has a defined indexer; otherwise the user
27777         emits it by decorating the class definition with the DefaultMemberAttribute.
27778
27779         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
27780         attribute is not used on a type which defines an indexer.
27781
27782         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
27783         character when we skip whitespace.
27784
27785         * ../errors/cs0646.cs : Add.
27786
27787 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
27788
27789         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
27790         again. 
27791
27792         * makefile: Add practical target `mcs3.exe' which builds the third
27793         generation compiler. 
27794
27795         * expression.cs (New): Fix structures constructor calling.
27796
27797         * class.cs (Property, Method, Indexer): Emit Final flag on the
27798         method if we are an interface implementation and we are not
27799         abstract. 
27800
27801         * ecore.cs (PropertyExpr): New public field `IsBase', tells
27802         whether this property is referencing a `base' method.
27803
27804         * expression.cs (Invocation.EmitCall): take an extra argument:
27805         is_base, this is used to determine whether the `call' or
27806         `callvirt' opcode should be used.
27807
27808
27809         * delegate.cs: update EmitCall.
27810
27811         * class.cs (Method.Define): Set NewSlot for the cases where we are
27812         not implementing an interface method.
27813
27814         (Property.Define): ditto.
27815
27816 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
27817
27818         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
27819         'r'.  Allows mcs to parse itself fully.
27820
27821 2002-01-02  Ravi Pratap  <ravi@ximian.com>
27822
27823         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
27824         of the number of initializers that require the InitializeArray method.
27825
27826         (CheckIndices): Store the Expression in all cases - not the plain value. Also
27827         update the above field where necessary.
27828
27829         (MakeByteBlob): Update accordingly.
27830
27831         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
27832         greater than 2.
27833
27834         (EmitDynamicInitializers): Update in accordance with the new optimization.
27835
27836         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
27837         same OpCode applies.
27838
27839         * cs-parser.jay : Fix some glaring errors I introduced.
27840
27841 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
27842
27843         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
27844         so that we can check for name clashes there too.
27845
27846         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
27847         for interface indexers.
27848
27849         * interfaces.cs (Define): Emit the default member attribute.
27850
27851         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
27852         variable was being referred to while setting the value ;-)
27853
27854 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
27855
27856         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
27857         byte-by-byte information when we know the data is zero.
27858
27859         Make the block always a multiple of 4, because
27860         DefineInitializedData has a bug.
27861
27862         * assign.cs: Fix, we should assign from the temporary, not from
27863         the source. 
27864
27865         * expression.cs (MakeByteBlob): Fix my incorrect code.
27866
27867 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
27868
27869         * typemanager.cs (EnumToUnderlying): This function is used to get
27870         the underlying type from an enumeration, because it does not
27871         always work. 
27872
27873         * constant.cs: Use the I4_S form for values between -128 and 127.
27874
27875         * statement.cs (Block.LookupLabel): Looks up a label.
27876         (Block): Drop support for labeled blocks.
27877
27878         (LabeledStatement): New kind of statement that represents a label
27879         only.
27880
27881         (Goto): Finally implement this bad boy.
27882
27883         * cs-parser.jay: Update to reflect new mechanism to implement
27884         labels.
27885
27886 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
27887
27888         * codegen.cs (EmitContext.This): a codegen property that keeps the
27889         a single instance of this instead of creating many different this
27890         instances. 
27891
27892         * delegate.cs (Delegate.DoResolve): Update to use the property;
27893
27894         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
27895
27896         * expression.cs (BaseAccess.DoResolve): Ditto.
27897
27898 2001-12-29  Ravi Pratap  <ravi@ximian.com>
27899
27900         * typemanager.cs (methodimpl_attr_type): Add to hold the type
27901         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
27902
27903         (InitCoreTypes): Update accordingly.
27904
27905         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
27906         so we can quickly store the state.
27907
27908         (ApplyAttributes): Set the correct implementation flags
27909         for InternalCall methods.
27910
27911 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
27912
27913         * expression.cs (EmitCall): if a method is not virtual, then do
27914         not use callvirt on it.
27915
27916         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
27917         user defined stuff) requires the use of stobj, which takes an
27918         address on the stack instead of an array and an index.  So emit
27919         the Ldelema operation for it.
27920
27921         (EmitStoreOpcode): Use stobj for valuetypes.
27922
27923         (UnaryMutator.EmitCode): Use the right 1 value depending on
27924         whether we are dealing with int64/uint64, float or doubles.
27925
27926         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
27927         constructors that I implemented last night.
27928
27929         (Constructor.IsDefault): Fix to work properly for static
27930         constructors.
27931
27932         * cs-parser.jay (CheckDef): report method signature errors.
27933         Update error number 103 to be 132.
27934
27935         * decl.cs: New AdditionResult enumeration value: MethodExists.
27936         Although we do this check for methods later on in the semantic
27937         analysis, catching repeated default constructors is so easy that
27938         we catch these here. 
27939
27940         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
27941         promotions code.
27942
27943         (ParameterReference.EmitAssign, Emit): handle
27944         bools as bytes.
27945
27946         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
27947         (ArrayAccess.EmitStoreOpcode): ditto.
27948
27949         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
27950
27951         * expression.cs (MakeByteBlob): Complete all the missing types
27952         (uint, short, ushort, byte, sbyte)
27953
27954         * class.cs: Only init instance field initializers on instance
27955         constructors. 
27956
27957         Rename `constructors' to instance_constructors. 
27958
27959         (TypeContainer.AddConstructor): Only add constructors to the list
27960         if it is not static.
27961
27962         Make sure that we handle default_static_constructor independently
27963         everywhere where we handle instance_constructors
27964
27965 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
27966
27967         * class.cs: Do not lookup or create a base initializer for a
27968         static constructor.
27969
27970         (ConstructorInitializer.Resolve): use the proper type to lookup
27971         for constructors.
27972
27973         * cs-parser.jay: Report error 1585 (modifiers between type and name).
27974
27975         * enum.cs, interface.cs: Remove CloseType, this is taken care by
27976         in DeclSpace. 
27977
27978         * decl.cs: CloseType is now an virtual method, the default
27979         implementation just closes this type.
27980
27981 2001-12-28  Ravi Pratap  <ravi@ximian.com>
27982
27983         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
27984         to PreserveSig by default. Also emit HideBySig on such methods.
27985
27986         Basically, set the defaults to standard values.
27987
27988         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
27989         argument, if candidate is better, it can't be worse than the best !
27990
27991         (Invocation): Re-write bits to differentiate between methods being
27992         applicable in their expanded form and their normal form - for params
27993         methods of course.
27994
27995         Get rid of use_standard everywhere as only standard conversions are allowed
27996         in overload resolution. 
27997
27998         More spec conformance.
27999
28000 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
28001
28002         * driver.cs: Add --timestamp, to see where the compiler spends
28003         most of its time.
28004
28005         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
28006         `this' in static code.
28007
28008         (SimpleName.DoResolve): Implement in terms of a helper function
28009         that allows static-references to be passed upstream to
28010         MemberAccess.
28011
28012         (Expression.ResolveWithSimpleName): Resolve specially simple
28013         names when called by MemberAccess to implement the special
28014         semantics. 
28015
28016         (Expression.ImplicitReferenceConversion): Handle conversions from
28017         Null to reference types before others, as Null's type is
28018         System.Object. 
28019
28020         * expression.cs (Invocation.EmitCall): Handle the special case of
28021         calling methods declared on a reference type from a ValueType
28022         (Base classes System.Object and System.Enum)
28023
28024         (MemberAccess.Resolve): Only perform lookups on Enumerations if
28025         the left hand side is a TypeExpr, not on every enumeration. 
28026
28027         (Binary.Resolve): If types are reference types, then do a cast to
28028         object on operators != and == of both arguments.
28029
28030         * typemanager.cs (FindMembers): Extract instance and static
28031         members if requested.
28032
28033         * interface.cs (PopulateProperty): Use void_type instead of null
28034         as the return type for the setter method.
28035
28036         (PopulateIndexer): ditto.
28037
28038 2001-12-27  Ravi Pratap  <ravi@ximian.com>
28039
28040         * support.cs (ReflectionParameters): Fix minor bug where we
28041         were examining the wrong parameter for the ParamArray attribute.
28042
28043         Cope with requests for the type of the parameter at position
28044         greater than the params parameter's. We now return the element
28045         type of the params array as that makes more sense.
28046
28047         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
28048         accordingly as we no longer have to extract the element type
28049         ourselves.
28050
28051         (Invocation.OverloadResolve): Update.
28052
28053 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
28054
28055         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
28056         against IEnumerator, test whether the return value is a descendant
28057         of the IEnumerator interface.
28058
28059         * class.cs (Indexer.Define): Use an auxiliary method to implement
28060         the other bits of the method definition.  Begin support for
28061         explicit interface implementation.
28062
28063         (Property.DefineMethod): Use TypeManager.void_type instead of null
28064         for an empty return value.
28065
28066 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
28067
28068         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
28069         dealing with a FieldExpr which is composed of a FieldBuilder, in
28070         the code path we did extract the constant, but we should have
28071         obtained the underlying value to be able to cast it (otherwise we
28072         end up in an infinite loop, this is what Ravi was running into).
28073
28074         (ArrayCreation.UpdateIndices): Arrays might be empty.
28075
28076         (MemberAccess.ResolveMemberAccess): Add support for section
28077         14.5.4.1 that deals with the special case of E.I when E is a type
28078         and something else, that I can be a reference to a static member.
28079
28080         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
28081         handle a particular array type to create byte blobs, it is just
28082         something we dont generate byteblobs for.
28083
28084         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
28085         arguments. 
28086
28087         * location.cs (Push): remove the key from the hashtable that we
28088         are about to add.   This happens for empty files.
28089
28090         * driver.cs: Dispose files after we have parsed them.
28091
28092         (tokenize): new function that only runs the tokenizer on its
28093         input, for speed testing.
28094
28095 2001-12-26  Ravi Pratap  <ravi@ximian.com>
28096
28097         * class.cs (Event.Define): Define the private field only if there
28098         are no accessors defined.
28099
28100         * expression.cs (ResolveMemberAccess): If there is no associated
28101         field with the event, that means we have an event defined with its
28102         own accessors and we should flag error cs0070 since transforming
28103         ourselves into a field is not valid in that case.
28104
28105         * ecore.cs (SimpleName.DoResolve): Same as above.
28106
28107         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
28108         and charset to sane values.
28109
28110 2001-12-25  Ravi Pratap  <ravi@ximian.com>
28111
28112         * assign.cs (DoResolve): Perform check on events only if they 
28113         are being accessed outside the declaring type.
28114
28115         * cs-parser.jay (event_declarations): Update rules to correctly
28116         set the type of the implicit parameter etc.
28117
28118         (add_accessor, remove_accessor): Set current local parameters.
28119
28120         * expression.cs (Binary): For delegate addition and subtraction,
28121         cast the return value from the method into the appropriate delegate
28122         type.
28123
28124 2001-12-24  Ravi Pratap  <ravi@ximian.com>
28125
28126         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
28127         of these as the workaround is unnecessary.
28128
28129         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
28130         delegate data - none of that is needed at all.
28131
28132         Re-write bits to extract the instance expression and the delegate method
28133         correctly.
28134
28135         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
28136         on delegates too.
28137
28138         * attribute.cs (ApplyAttributes): New method to take care of common tasks
28139         of attaching attributes instead of duplicating code everywhere.
28140
28141         * everywhere : Update code to do attribute emission using the above method.
28142
28143 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
28144
28145         * expression.cs (IsParamsMethodApplicable): if there are not
28146         parameters, return immediately.
28147
28148         * ecore.cs: The 0 literal can be implicity converted to an enum
28149         type. 
28150
28151         (SimpleName.DoResolve): First lookup the type, then lookup the
28152         members. 
28153
28154         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
28155         want to get its address.  If the InstanceExpression is not
28156         addressable, store the result in a temporary variable, then get
28157         the address of it.
28158
28159         * codegen.cs: Only display 219 errors on warning level or above. 
28160
28161         * expression.cs (ArrayAccess): Make it implement the
28162         IMemoryLocation interface.
28163
28164         (Binary.DoResolve): handle the operator == (object a, object b)
28165         and operator != (object a, object b) without incurring into a
28166         BoxedCast (because 5 != o should never be performed).
28167
28168         Handle binary enumerator operators.
28169
28170         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
28171         value type, otherwise use Ldelem_ref.
28172
28173         Use precomputed names;
28174
28175         (AddressOf): Implement address of
28176
28177         * cs-parser.jay (labeled_statement): Fix recursive block
28178         addition by reworking the production.
28179
28180         * expression.cs (New.DoEmit): New has a special case:
28181                 
28182                  If we are dealing with a ValueType, we have a few
28183                  situations to deal with:
28184                 
28185                     * The target of New is a ValueType variable, that is
28186                       easy, we just pass this as the variable reference
28187                 
28188                     * The target of New is being passed as an argument,
28189                       to a boxing operation or a function that takes a
28190                       ValueType.
28191                 
28192                       In this case, we need to create a temporary variable
28193                       that is the argument of New.
28194
28195
28196 2001-12-23  Ravi Pratap  <ravi@ximian.com>
28197
28198         * rootcontext.cs (LookupType): Check that current_type is not null before
28199         going about looking at nested types.
28200
28201         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
28202         not implement the IAssignMethod interface any more.
28203
28204         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
28205         where we tranform them into FieldExprs if they are being resolved from within
28206         the declaring type.
28207
28208         * ecore.cs (SimpleName.DoResolve): Do the same here.
28209
28210         * assign.cs (DoResolve, Emit): Clean up code considerably. 
28211
28212         * ../errors/bug10.cs : Add.
28213
28214         * ../errors/cs0070.cs : Add.
28215
28216         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
28217
28218         * assign.cs : Get rid of EventIsLocal everywhere.
28219
28220 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
28221
28222         * ecore.cs (ConvertIntLiteral): finished the implementation.
28223
28224         * statement.cs (SwitchLabel): Convert the value we are using as a
28225         key before looking up the table.
28226
28227 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
28228
28229         * codegen.cs (EmitTopBlock): Require a Location argument now.
28230
28231         * cs-parser.jay (constructor_declarator): We need to setup
28232         current_local_parameters before we parse the
28233         opt_constructor_initializer, to allow the variables to be bound
28234         to the constructor arguments.
28235
28236         * rootcontext.cs (LookupType): First lookup nested classes in our
28237         class and our parents before we go looking outside our class.
28238
28239         * expression.cs (ConstantFold): Extract/debox the values at the
28240         beginnning. 
28241
28242         * rootcontext.cs (EmitCode): Resolve the constants first before we
28243         resolve the types.  This is not really needed, but it helps debugging.
28244
28245         * statement.cs: report location.
28246
28247         * cs-parser.jay: pass location to throw statement.
28248
28249         * driver.cs: Small bug fix.
28250
28251         * report.cs: Updated format to be 4-zero filled digits.
28252
28253 2001-12-22  Ravi Pratap  <ravi@ximian.com>
28254
28255         * expression.cs (CheckIndices): Fix minor bug where the wrong
28256         variable was being referred to ;-)
28257
28258         (DoEmit): Do not call EmitStaticInitializers when the 
28259         underlying type is System.Object.
28260
28261 2001-12-21  Ravi Pratap  <ravi@ximian.com>
28262
28263         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
28264         and do the usual workaround for SRE.
28265
28266         * class.cs (MyEventBuilder.EventType): New member to get at the type
28267         of the event, quickly.
28268
28269         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
28270
28271         * assign.cs (Assign.DoResolve): Handle the case when the target
28272         is an EventExpr and perform the necessary checks.
28273
28274         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
28275         interface.
28276
28277         (SimpleName.MemberStaticCheck): Include check for EventExpr.
28278
28279         (EventExpr): Set the type in the constructor itself since we 
28280         are meant to be born fully resolved.
28281
28282         (EventExpr.Define): Revert code I wrote earlier.
28283                 
28284         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
28285         instance expression is null. The instance expression is a This in that case
28286         or a null, depending on whether it is a static method or not.
28287
28288         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
28289         refers to more than one method.
28290
28291         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
28292         and accordingly flag errors.
28293
28294 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
28295
28296         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
28297
28298 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
28299
28300         * location.cs (ToString): Provide useful rutine.
28301
28302 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
28303
28304         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
28305         objects, return the actual integral boxed.
28306
28307         * statement.cs (SwitchLabel): define an ILLabel for each
28308         SwitchLabel. 
28309
28310         (Switch.CheckSwitch): If the value is a Literal, extract
28311         the underlying literal.
28312
28313         Also in the unused hashtable we had, add the SwitchLabel so we can
28314         quickly look this value up.
28315
28316         * constant.cs: Implement a bunch of new constants.  Rewrite
28317         Literal based on this.  Made changes everywhere to adapt to this.
28318
28319         * expression.cs (Expression.MakeByteBlob): Optimize routine by
28320         dereferencing array only once, and also copes with enumrations.
28321
28322         bytes are two bytes wide, not one.
28323
28324         (Cast): Perform constant conversions.
28325
28326         * ecore.cs (TryImplicitIntConversion): Return literals instead of
28327         wrappers to the literals here.
28328
28329         * expression.cs (DoNumericPromotions): long literals can converted
28330         to ulong implicity (this is taken care of elsewhere, but I was
28331         missing this spot).
28332
28333         * ecore.cs (Expression.Literalize): Make the return type Literal,
28334         to improve type checking.
28335
28336         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
28337
28338 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
28339
28340         * literal.cs: Revert code from ravi that checked the bounds.  The
28341         bounds are sane by the definition of the type itself. 
28342
28343         * typemanager.cs: Fix implementation of ImplementsInterface.  We
28344         need to actually look up in our parent hierarchy for interfaces
28345         implemented. 
28346
28347         * const.cs: Use the underlying type for enumerations
28348
28349         * delegate.cs: Compute the basename for the delegate creation,
28350         that should fix the delegate test case, and restore the correct
28351         Type Lookup semantics in rootcontext
28352
28353         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
28354         referencing a nested type with the Reflection API is using the "+"
28355         sign. 
28356
28357         * cs-parser.jay: Do not require EOF token at the end.
28358
28359 2001-12-20  Ravi Pratap  <ravi@ximian.com>
28360
28361         * rootcontext.cs (LookupType): Concatenate type names with
28362         a '.' instead of a '+' The test suite passes again.
28363
28364         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
28365         field of the enumeration.
28366
28367         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
28368         the case when the member is an EventExpr.
28369
28370         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
28371         static has an associated instance expression.
28372
28373         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
28374
28375         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
28376
28377         * class.cs (Event.Define): Register event and perform appropriate checks
28378         for error #111.
28379
28380         We define the Add and Remove methods even if the use provides none because
28381         in that case, we provide default implementations ourselves.
28382
28383         Define a private field of the type of the event. This is done by the CSC compiler
28384         and we should be doing it too ;-)
28385
28386         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
28387         More methods we use in code we generate.
28388
28389         (multicast_delegate_type, delegate_type): Two separate types since the distinction
28390         is important.
28391
28392         (InitCoreTypes): Update accordingly for the above.
28393
28394         * class.cs (Event.Emit): Generate code for default accessors that we provide
28395
28396         (EmitDefaultMethod): Do the job in the above.
28397
28398         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
28399         appropriate place.
28400
28401 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
28402
28403         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
28404         builders even if we were missing one.
28405
28406         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
28407         pass the Basename as our class name instead of the Name.  The
28408         basename will be correctly composed for us.
28409
28410         * parameter.cs (Paramters): Now takes a Location argument.
28411
28412         * decl.cs (DeclSpace.LookupType): Removed convenience function and
28413         make all the code call directly LookupType in RootContext and take
28414         this chance to pass the Location information everywhere.
28415
28416         * Everywhere: pass Location information.
28417
28418 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
28419
28420         * class.cs (Constructor.Define): Updated way of detecting the
28421         length of the parameters.
28422
28423         (TypeContainer.DefineType): Use basename as the type name for
28424         nested types.
28425
28426         (TypeContainer.Define): Do not recursively define types here, as
28427         definition is taken care in order by the RootContext.
28428
28429         * tree.cs: Keep track of namespaces in a per-file basis.
28430
28431         * parameter.cs (Parameter.ComputeSignature): Update to use
28432         DeclSpace. 
28433
28434         (Parameters.GetSignature): ditto.
28435
28436         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
28437         instead of a TypeContainer.
28438
28439         (Interface.SemanticAnalysis): Use `this' instead of our parent to
28440         resolve names.  Because we need to be resolve in our context, not
28441         our parents.
28442
28443         * driver.cs: Implement response files.
28444
28445         * class.cs (TypeContainer.DefineType): If we are defined, do not
28446         redefine ourselves.
28447
28448         (Event.Emit): Emit the code for add/remove handlers.
28449         (Event.Define): Save the MethodBuilders for add/remove.
28450
28451         * typemanager.cs: Use pair here too.
28452
28453         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
28454         DictionaryEntry requires the first argument to be non-null.  
28455
28456         (enum_declaration): Compute full name for registering the
28457         enumeration.
28458
28459         (delegate_declaration): Instead of using
28460         formal_parameter_list, use opt_formal_parameter_list as the list
28461         can be empty.
28462
28463         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
28464         (EventParsing): New property that controls whether `add' and
28465         `remove' are returned as tokens or identifiers (for events);
28466
28467 2001-12-19  Ravi Pratap  <ravi@ximian.com>
28468
28469         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
28470         use MyEventBuilder only and let it wrap the real builder for us.
28471
28472         (MyEventBuilder): Revamp constructor etc.
28473
28474         Implement all operations that we perform on EventBuilder in precisely the same
28475         way here too.
28476
28477         (FindMembers): Update to use the EventBuilder member.
28478
28479         (Event.Emit): Update accordingly.
28480
28481 2001-12-18  Ravi Pratap  <ravi@ximian.com>
28482
28483         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
28484         by calling the appropriate methods.
28485
28486         (GetCustomAttributes): Make stubs as they cannot possibly do anything
28487         useful.
28488
28489         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
28490
28491 2001-12-17  Ravi Pratap  <ravi@ximian.com>
28492
28493         * delegate.cs (Delegate.Populate): Check that the return type
28494         and various parameters types are indeed accessible.
28495
28496         * class.cs (Constructor.Define): Same here.
28497
28498         (Field.Define): Ditto.
28499
28500         (Event.Define): Ditto.
28501
28502         (Operator.Define): Check that the underlying Method defined itself
28503         correctly - so it's MethodBuilder should not be null.
28504
28505         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
28506         expression happens to be null.
28507
28508         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
28509         members but as of now we don't seem to be able to do anything really useful with it.
28510
28511         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
28512         not the EventBuilder.
28513
28514 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
28515
28516         * cs-tokenizer.cs: Add support for defines.
28517         Add support for #if, #elif, #else, #endif
28518
28519         (eval_var): evaluates a variable.
28520         (eval): stubbed for evaluating functions.
28521
28522         * cs-parser.jay: Pass the defines information
28523
28524         * driver.cs: Add --define command line option.
28525
28526         * decl.cs: Move MemberCore here.
28527
28528         Make it the base class for DeclSpace.  This allows us to catch and
28529         report 108 and 109 for everything now.
28530
28531         * class.cs (TypeContainer.Define): Extract all the members
28532         before populating and emit the warning 108 (new keyword required
28533         to override) instead of having each member implement this.
28534
28535         (MemberCore.Define): New abstract method, we will be using this in
28536         the warning reporting engine in Populate.
28537
28538         (Operator.Define): Adjust to new MemberCore protocol. 
28539
28540         * const.cs (Const): This does not derive from Expression, it is a
28541         temporary object we use to create fields, it is a MemberCore. 
28542
28543         * class.cs (Method.Define): Allow the entry point to be in a
28544         specific class.
28545
28546         * driver.cs: Rewrite the argument handler to clean it up a bit.
28547
28548         * rootcontext.cs: Made it just an auxiliary namespace feature by
28549         making everything static.
28550
28551         * driver.cs: Adapt code to use RootContext type name instead of
28552         instance variable.
28553
28554         * delegate.cs: Remove RootContext argument.
28555
28556         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
28557         argument. 
28558
28559         * class.cs (Event.Define): The lookup can fail.
28560
28561         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
28562
28563         * expression.cs: Resolve the this instance before invoking the code.
28564
28565 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
28566
28567         * cs-parser.jay: Add a production in element_access that allows
28568         the thing to become a "type" reference.  This way we can parse
28569         things like "(string [])" as a type.
28570
28571         Note that this still does not handle the more complex rules of
28572         casts. 
28573
28574
28575         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
28576
28577         * ecore.cs: (CopyNewMethods): new utility function used to
28578         assemble the list of methods from running FindMembers.
28579
28580         (MemberLookup): Rework FindMembers so that 
28581
28582 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
28583
28584         * class.cs (TypeContainer): Remove Delegates who fail to be
28585         defined.
28586
28587         * delegate.cs (Populate): Verify that we dont get null return
28588         values.   TODO: Check for AsAccessible.
28589
28590         * cs-parser.jay: Use basename to emit error 574 (destructor should
28591         have the same name as container class), not the full name.
28592
28593         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
28594         possible representation.  
28595
28596         Also implements integer type suffixes U and L.
28597
28598 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
28599
28600         * expression.cs (ArrayCreation.DoResolve): We need to do the
28601         argument resolution *always*.
28602
28603         * decl.cs: Make this hold the namespace.  Hold the root context as
28604         well.
28605         (LookupType): Move here.
28606
28607         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
28608
28609         * location.cs (Row, Name): Fixed the code, it was always returning
28610         references to the first file.
28611
28612         * interface.cs: Register properties defined through interfaces.
28613
28614         * driver.cs: Add support for globbing on the command line
28615
28616         * class.cs (Field): Make it derive from MemberCore as well.
28617         (Event): ditto.
28618
28619 2001-12-15  Ravi Pratap  <ravi@ximian.com>
28620
28621         * class.cs (Event::Define): Check that the type of the event is a delegate
28622         type else flag error #66.
28623
28624         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
28625         same.
28626
28627         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
28628         values of EntryPoint, CharSet etc etc.
28629
28630         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
28631
28632         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
28633         be null and we should ignore this. I am not sure if this is really clean. Apparently,
28634         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
28635         which needs this to do its work.
28636
28637         * ../errors/cs0066.cs : Add.
28638
28639 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
28640
28641         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
28642         helper functions.
28643
28644         * class.cs: (MethodSignature.MethodSignature): Removed hack that
28645         clears out the parameters field.
28646         (MemberSignatureCompare): Cleanup
28647
28648         (MemberCore): New base class used to share code between MethodCore
28649         and Property.
28650
28651         (RegisterRequiredImplementations) BindingFlags.Public requires
28652         either BindingFlags.Instace or Static.  Use instance here.
28653
28654         (Property): Refactored code to cope better with the full spec.
28655
28656         * parameter.cs (GetParameterInfo): Return an empty array instead
28657         of null on error.
28658
28659         * class.cs (Property): Abstract or extern properties have no bodies.
28660
28661         * parameter.cs (GetParameterInfo): return a zero-sized array.
28662
28663         * class.cs (TypeContainer.MethodModifiersValid): Move all the
28664         method modifier validation to the typecontainer so we can reuse
28665         this on properties.
28666
28667         (MethodCore.ParameterTypes): return an empty sized array of types.
28668
28669         (Property.Define): Test property modifier validity.
28670
28671         Add tests for sealed/override too.
28672
28673         (Method.Emit): abstract or extern methods have no bodies.
28674
28675 2001-12-14  Ravi Pratap  <ravi@ximian.com>
28676
28677         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
28678         thing.
28679
28680         (Method::Define, ::Emit): Modify accordingly.
28681
28682         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
28683
28684         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
28685
28686         * makefile: Pass in /unsafe.
28687
28688 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
28689
28690         * class.cs (MakeKey): Kill routine.
28691
28692         * class.cs (TypeContainer.Define): Correctly define explicit
28693         method implementations (they require the full interface name plus
28694         the method name).
28695
28696         * typemanager.cs: Deply the PtrHashtable here and stop using the
28697         lame keys.  Things work so much better.
28698
28699         This of course broke everyone who depended on `RegisterMethod' to
28700         do the `test for existance' test.  This has to be done elsewhere.
28701
28702         * support.cs (PtrHashtable): A hashtable that avoid comparing with
28703         the object stupid Equals method (because, that like fails all over
28704         the place).  We still do not use it.
28705
28706         * class.cs (TypeContainer.SetRequiredInterface,
28707         TypeContainer.RequireMethods): Killed these two routines and moved
28708         all the functionality to RegisterRequiredImplementations.
28709
28710         (TypeContainer.RegisterRequiredImplementations): This routine now
28711         registers all the implementations required in an array for the
28712         interfaces and abstract methods.  We use an array of structures
28713         which can be computed ahead of time to reduce memory usage and we
28714         also assume that lookups are cheap as most classes will not
28715         implement too many interfaces.
28716
28717         We also avoid creating too many MethodSignatures.
28718
28719         (TypeContainer.IsInterfaceMethod): Update and optionally does not
28720         clear the "pending" bit if we find that there are problems with
28721         the declaration.
28722
28723         (TypeContainer.VerifyPendingMethods): Update to report errors of
28724         methods that look like implementations but are not.
28725
28726         (TypeContainer.Define): Add support for explicit interface method
28727         implementation. 
28728
28729 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
28730
28731         * typemanager.cs: Keep track of the parameters here instead of
28732         being a feature of the TypeContainer.
28733
28734         * class.cs: Drop the registration of parameters here, as
28735         InterfaceMethods are also interface declarations.
28736
28737         * delegate.cs: Register methods with the TypeManager not only with
28738         the TypeContainer.  This code was buggy.
28739
28740         * interface.cs: Full registation here.
28741
28742 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
28743
28744         * expression.cs: Remove reducer for binary expressions, it can not
28745         be done this way.
28746
28747         * const.cs: Put here the code that used to go into constant.cs
28748
28749         * constant.cs: Put here the code for constants, this is a new base
28750         class for Literals.
28751
28752         * literal.cs: Make Literal derive from Constant.
28753
28754 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
28755
28756         * statement.cs (Return.Emit): Report error 157 if the user
28757         attempts to return from a finally block.
28758
28759         (Return.Emit): Instead of emitting a return, jump to the end of
28760         the function.
28761
28762         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
28763         LocalBuilder to store the result of the function.  ReturnLabel is
28764         the target where we jump.
28765
28766
28767 2001-12-09  Radek Doulik  <rodo@ximian.com>
28768
28769         * cs-parser.jay: remember alias in current namespace
28770
28771         * ecore.cs (SimpleName::DoResolve): use aliases for types or
28772         namespaces
28773
28774         * class.cs (LookupAlias): lookup alias in my_namespace
28775
28776         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
28777         aliases hashtable
28778         (LookupAlias): lookup alias in this and if needed in parent
28779         namespaces
28780
28781 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
28782
28783         * support.cs: 
28784
28785         * rootcontext.cs: (ModuleBuilder) Made static, first step into
28786         making things static.  I need this to avoid passing the
28787         TypeContainer when calling ParameterType.
28788
28789         * support.cs (InternalParameters.ParameterType): Remove ugly hack
28790         that did string manipulation to compute the type and then call
28791         GetType.  Use Parameter.ParameterType instead.
28792
28793         * cs-tokenizer.cs: Consume the suffix for floating values.
28794
28795         * expression.cs (ParameterReference): figure out whether this is a
28796         reference parameter or not.  Kill an extra variable by computing
28797         the arg_idx during emission.
28798
28799         * parameter.cs (Parameters.GetParameterInfo): New overloaded
28800         function that returns whether a parameter is an out/ref value or not.
28801
28802         (Parameter.ParameterType): The type of the parameter (base,
28803         without ref/out applied).
28804
28805         (Parameter.Resolve): Perform resolution here.
28806         (Parameter.ExternalType): The full type (with ref/out applied).
28807
28808         * statement.cs (Using.Emit, Using.EmitExpression): Implement
28809         support for expressions on the using statement.
28810
28811 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
28812
28813         * statement.cs (Using.EmitLocalVariableDecls): Split the
28814         localvariable handling of the using statement.
28815
28816         (Block.EmitMeta): Keep track of variable count across blocks.  We
28817         were reusing slots on separate branches of blocks.
28818
28819         (Try.Emit): Emit the general code block, we were not emitting it. 
28820
28821         Check the type of the declaration to be an IDisposable or
28822         something that can be implicity converted to it. 
28823
28824         Emit conversions if required.
28825
28826         * ecore.cs (EmptyExpression): New utility class.
28827         (Expression.ImplicitConversionExists): New utility function.
28828
28829 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
28830
28831         * statement.cs (Using): Implement.
28832
28833         * expression.cs (LocalVariableReference): Support read only variables.
28834
28835         * statement.cs: Remove the explicit emit for the Leave opcode.
28836         (VariableInfo): Add a readonly field.
28837
28838 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
28839
28840         * ecore.cs (ConvCast): new class used to encapsulate the various
28841         explicit integer conversions that works in both checked and
28842         unchecked contexts.
28843
28844         (Expression.ConvertNumericExplicit): Use new ConvCast class to
28845         properly generate the overflow opcodes.
28846
28847 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
28848
28849         * statement.cs: The correct type for the EmptyExpression is the
28850         element_type, not the variable type.  Ravi pointed this out.
28851
28852 2001-12-04  Ravi Pratap  <ravi@ximian.com>
28853
28854         * class.cs (Method::Define): Handle PInvoke methods specially
28855         by using DefinePInvokeMethod instead of the usual one.
28856
28857         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
28858         above to do the task of extracting information and defining the method.
28859
28860 2001-12-04  Ravi Pratap  <ravi@ximian.com>
28861
28862         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
28863         of the condition for string type.
28864
28865         (Emit): Move that here. 
28866
28867         (ArrayCreation::CheckIndices): Keep string literals in their expression
28868         form.
28869
28870         (EmitDynamicInitializers): Handle strings appropriately.
28871
28872 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
28873
28874         * codegen.cs (EmitContext): Replace multiple variables with a
28875         single pointer to the current Switch statement.
28876
28877         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
28878         EmitContext.
28879
28880 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
28881
28882         * statement.cs 
28883
28884         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
28885         default'.
28886
28887         (Foreach.Emit): Foreach on arrays was not setting
28888         up the loop variables (for break/continue).
28889
28890         (GotoCase): Semi-implented.
28891
28892 2001-12-03  Ravi Pratap  <ravi@ximian.com>
28893
28894         * attribute.cs (CheckAttribute): Handle system attributes by using
28895         Attribute.GetAttributes to examine information we need.
28896
28897         (GetValidPlaces): Same here.
28898
28899         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
28900
28901         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
28902
28903         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
28904
28905         (Method::Define): Set appropriate flags if we have a DllImport attribute.
28906
28907         (Method::Emit): Handle the case when we are a PInvoke method.
28908
28909 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
28910
28911         * expression.cs: Use ResolveWithSimpleName on compound names.
28912
28913 2001-12-02  Ravi Pratap  <ravi@ximian.com>
28914
28915         * constant.cs (EmitConstant): Make sure we resolve the associated expression
28916         before trying to reduce it.
28917
28918         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
28919
28920         * constant.cs (LookupConstantValue): Implement.
28921
28922         (EmitConstant): Use the above in emitting the constant.
28923
28924         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
28925         that are user-defined by doing a LookupConstantValue on them.
28926
28927         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
28928         too, like above.
28929
28930 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
28931
28932         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
28933
28934         (BaseAccess.DoResolve): Implement.
28935
28936         (MemberAccess.DoResolve): Split this routine into a
28937         ResolveMemberAccess routine that can be used independently
28938
28939 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
28940
28941         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
28942         As that share bits of the implementation.  Is returns a boolean,
28943         while As returns the Type that is being probed.
28944
28945 2001-12-01  Ravi Pratap  <ravi@ximian.com>
28946
28947         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
28948         instead of a Literal - much easier.
28949
28950         (EnumInTransit): Remove - utterly useless :-)
28951
28952         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
28953
28954         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
28955
28956         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
28957         chain when we have no associated expression.
28958
28959 2001-11-30  Ravi Pratap  <ravi@ximian.com>
28960
28961         * constant.cs (Define): Use Location while reporting the errror.
28962
28963         Also emit a warning when 'new' is used and there is no inherited
28964         member to hide.
28965
28966         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
28967         populated.
28968
28969         (LookupEnumValue): Implement to lookup an enum member's value and define it
28970         if necessary.
28971
28972         (Populate): Re-write accordingly to use the above routine.
28973
28974 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
28975
28976         * expression.cs (This): Fix prototype for DoResolveLValue to
28977         override the base class DoResolveLValue.
28978
28979         * cs-parser.cs: Report errors cs574 and cs575 (destructor
28980         declarations) 
28981
28982         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
28983         (we need to load the address of the field here).  This fixes
28984         test-22. 
28985
28986         (FieldExpr.DoResolveLValue): Call the DoResolve
28987         function to initialize the Instance expression.
28988
28989         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
28990         correctly the GetEnumerator operation on a value type.
28991
28992         * cs-parser.jay: Add more simple parsing error catches.
28993
28994         * statement.cs (Switch): Add support for string switches.
28995         Handle null specially.
28996
28997         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
28998
28999 2001-11-28  Ravi Pratap  <ravi@ximian.com>
29000
29001         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
29002
29003         (declare_local_constant): New helper function.
29004
29005         * statement.cs (AddConstant): Keep a separate record of constants
29006
29007         (IsConstant): Implement to determine if a variable is a constant.
29008
29009         (GetConstantExpression): Implement.
29010
29011         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
29012
29013         * statement.cs (IsVariableDefined): Re-write.
29014
29015 2001-11-27  Ravi Pratap  <ravi@ximian.com>
29016
29017         * class.cs (TypeContainer::FindMembers): Look for constants
29018         in the case when we are looking for MemberTypes.Field
29019
29020         * expression.cs (MemberAccess::DoResolve): Check that in the
29021         case we are a FieldExpr and a Literal, we are not being accessed
29022         by an instance reference.
29023
29024         * cs-parser.jay (local_constant_declaration): Implement.
29025
29026         (declaration_statement): Implement for constant declarations.
29027
29028 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
29029
29030         * statement.cs (Switch): Catch double defaults.
29031
29032         (Switch): More work on the switch() statement
29033         implementation.  It works for integral values now, need to finish
29034         string support.
29035
29036
29037 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
29038
29039         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
29040         integer literals into other integer literals.  To be used by
29041         switch. 
29042
29043 2001-11-24  Ravi Pratap  <ravi@ximian.com>
29044
29045         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
29046         some memory.
29047
29048         (EmitDynamicInitializers): Cope with the above since we extract data
29049         directly from ArrayData now.
29050
29051         (ExpectInitializers): Keep track of whether initializers are mandatory
29052         or not.
29053
29054         (Bounds): Make it a hashtable to prevent the same dimension being 
29055         recorded for every element in that dimension.
29056
29057         (EmitDynamicInitializers): Fix bug which prevented the Set array method
29058         from being found.
29059
29060         Also fix bug which was causing the indices to be emitted in the reverse
29061         order.
29062
29063 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
29064
29065         * expression.cs (ArrayCreation): Implement the bits that Ravi left
29066         unfinished.  They do not work, because the underlying code is
29067         sloppy.
29068
29069 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29070
29071         * cs-parser.jay: Remove bogus fixme.
29072
29073         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
29074         on Switch statement.
29075
29076 2001-11-23  Ravi Pratap  <ravi@ximian.com>
29077
29078         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
29079         the same. 
29080
29081         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
29082         parameter. Apparently, any expression is allowed. 
29083
29084         (ValidateInitializers): Update accordingly.
29085
29086         (CheckIndices): Fix some tricky bugs thanks to recursion.
29087
29088         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
29089         I was being completely brain-dead.
29090
29091         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
29092         and re-write acordingly.
29093
29094         (DelegateInvocation): Re-write accordingly.
29095
29096         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
29097
29098         (MakeByteBlob): Handle types more correctly.
29099
29100         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
29101         initialization from expressions but it is incomplete because I am a complete
29102         Dodo :-|
29103
29104 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29105
29106         * statement.cs (If.Emit): Fix a bug that generated incorrect code
29107         on If.  Basically, we have to return `true' (ie, we do return to
29108         our caller) only if both branches of the if return.
29109
29110         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
29111         short-circuit operators, handle them as short circuit operators. 
29112
29113         (Cast.DoResolve): Resolve type.
29114         (Cast.Cast): Take an expression as the target type.
29115
29116         * cs-parser.jay (cast_expression): Remove old hack that only
29117         allowed a limited set of types to be handled.  Now we take a
29118         unary_expression and we resolve to a type during semantic
29119         analysis.
29120
29121         Use the grammar productions from Rhys to handle casts (this is
29122         not complete like Rhys syntax yet, we fail to handle that corner
29123         case that C# has regarding (-x), but we will get there.
29124
29125 2001-11-22  Ravi Pratap  <ravi@ximian.com>
29126
29127         * class.cs (EmitFieldInitializer): Take care of the case when we have a
29128         field which is an array type.
29129
29130         * cs-parser.jay (declare_local_variables): Support array initialization too.
29131
29132         * typemanager.cs (MakeKey): Implement.
29133
29134         (everywhere): Use the above appropriately.
29135
29136         * cs-parser.jay (for_statement): Update for array initialization while
29137         declaring variables.
29138
29139         * ecore.cs : The error message was correct, it's the variable's names that
29140         were misleading ;-) Make the code more readable.
29141
29142         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
29143         the correct type etc.
29144
29145         (ConvertExplicit): Handle Enum types by examining the underlying type.
29146
29147 2001-11-21  Ravi Pratap  <ravi@ximian.com>
29148
29149         * parameter.cs (GetCallingConvention): Always return
29150         CallingConventions.Standard for now.
29151
29152 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29153
29154         * expression.cs (Binary.ResolveOperator): Update the values of `l'
29155         and `r' after calling DoNumericPromotions.
29156
29157         * ecore.cs: Fix error message (the types were in the wrong order).
29158
29159         * statement.cs (Foreach.ProbeCollectionType): Need to pass
29160         BindingFlags.Instance as well 
29161
29162         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
29163         implicit int literal conversion in an empty cast so that we
29164         propagate the right type upstream.
29165
29166         (UnboxCast): new class used to unbox value types.
29167         (Expression.ConvertExplicit): Add explicit type conversions done
29168         by unboxing.
29169
29170         (Expression.ImplicitNumericConversion): Oops, forgot to test for
29171         the target type before applying the implicit LongLiterals to ULong
29172         literal cast.
29173
29174 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
29175
29176         * cs-parser.jay (for_statement): Reworked the way For works: now
29177         we declare manually any variables that are introduced in
29178         for_initializer to solve the problem of having out-of-band code
29179         emition (that is what got for broken).
29180
29181         (declaration_statement): Perform the actual variable declaration
29182         that used to be done in local_variable_declaration here.
29183
29184         (local_variable_declaration): Do not declare anything, just pass
29185         the information on a DictionaryEntry
29186
29187 2001-11-20  Ravi Pratap  <ravi@ximian.com>
29188
29189         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
29190         re-write of the logic to now make it recursive.
29191
29192         (UpdateIndices): Re-write accordingly.
29193
29194         Store element data in a separate ArrayData list in the above methods.
29195
29196         (MakeByteBlob): Implement to dump the array data into a byte array.
29197
29198 2001-11-19  Ravi Pratap  <ravi@ximian.com>
29199
29200         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
29201         into CheckIndices.
29202
29203         * constant.cs (Define): Implement.
29204
29205         (EmitConstant): Re-write fully.
29206
29207         Pass in location info.
29208
29209         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
29210         respectively.
29211
29212         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
29213         DictionaryEntry since we need location info too.
29214
29215         (constant_declaration): Update accordingly.
29216
29217         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
29218         code into another method : UpdateIndices.
29219
29220 2001-11-18  Ravi Pratap  <ravi@ximian.com>
29221
29222         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
29223         some type checking etc.
29224
29225 2001-11-17  Ravi Pratap  <ravi@ximian.com>
29226
29227         * expression.cs (ArrayCreation::ValidateInitializers): Implement
29228         bits to provide dimension info if the user skips doing that.
29229
29230         Update second constructor to store the rank correctly.
29231
29232 2001-11-16  Ravi Pratap  <ravi@ximian.com>
29233
29234         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
29235         and try to implement.
29236
29237         * ../errors/cs0150.cs : Add.
29238
29239         * ../errors/cs0178.cs : Add.
29240
29241 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
29242
29243         * statement.cs: Implement foreach on multi-dimensional arrays. 
29244
29245         * parameter.cs (Parameters.GetParameterByName): Also lookup the
29246         name of the params argument.
29247
29248         * expression.cs: Use EmitStoreOpcode to get the right opcode while
29249         initializing the array.
29250
29251         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
29252         we can use this elsewhere.
29253
29254         * statement.cs: Finish implementation of foreach for single
29255         dimension arrays.
29256
29257         * cs-parser.jay: Use an out-of-band stack to pass information
29258         around, I wonder why I need this.
29259
29260         foreach_block: Make the new foreach_block the current_block.
29261
29262         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
29263         function used to return a static Parameters structure.  Used for
29264         empty parameters, as those are created very frequently.
29265
29266         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
29267
29268 2001-11-15  Ravi Pratap  <ravi@ximian.com>
29269
29270         * interface.cs : Default modifier is private, not public. The
29271         make verify test passes again.
29272
29273 2001-11-15  Ravi Pratap  <ravi@ximian.com>
29274
29275         * support.cs (ReflectionParameters): Fix logic to determine
29276         whether the last parameter is a params one. Test 9 passes again.
29277
29278         * delegate.cs (Populate): Register the builders we define with
29279         RegisterParameterForBuilder. Test 19 passes again.
29280
29281         * cs-parser.jay (property_declaration): Reference $6 instead
29282         of $$ to get at the location.
29283
29284         (indexer_declaration): Similar stuff.
29285
29286         (attribute): Ditto.
29287
29288         * class.cs (Property): Register parameters for the Get and Set methods
29289         if they exist. Test 23 passes again.
29290
29291         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
29292         call to EmitArguments as we are sure there aren't any params arguments. 
29293         Test 32 passes again.
29294
29295         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
29296         IndexOutOfRangeException. 
29297
29298         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
29299         Test 33 now passes again.
29300
29301 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
29302
29303         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
29304         broke a bunch of things.  Will have to come up with a better way
29305         of tracking locations.
29306
29307         * statement.cs: Implemented foreach for single dimension arrays.
29308
29309 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
29310
29311         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
29312         an error.  This removes the lookup from the critical path.
29313
29314         * cs-parser.jay: Removed use of temporary_loc, which is completely
29315         broken. 
29316
29317 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
29318
29319         * support.cs (ReflectionParameters.ParameterModifier): Report
29320         whether the argument is a PARAMS argument or not.
29321
29322         * class.cs: Set the attribute `ParamArrayAttribute' on the
29323         parameter argument.
29324
29325         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
29326         and cons_param_array_attribute (ConstructorInfo for
29327         ParamArrayAttribute)., 
29328
29329         * codegen.cs: Emit the return using the `Return' statement, that
29330         way we can report the error correctly for missing return values. 
29331
29332         * class.cs (Method.Emit): Clean up.
29333
29334         * expression.cs (Argument.Resolve): Take another argument: the
29335         location where this argument is used.  Notice that this is not
29336         part of the "Argument" class as to reduce the size of the
29337         structure (we know the approximate location anyways).
29338
29339         Test if the argument is a variable-reference, if not, then
29340         complain with a 206.
29341
29342         (Argument.Emit): Emit addresses of variables.
29343
29344         (Argument.FullDesc): Simplify.
29345
29346         (Invocation.DoResolve): Update for Argument.Resolve.
29347
29348         (ElementAccess.DoResolve): ditto.
29349
29350         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
29351         method should be virtual, as this method is always virtual.
29352
29353         (NewDelegate.DoResolve): Update for Argument.Resolve.
29354
29355         * class.cs (ConstructorInitializer.DoResolve): ditto.
29356
29357         * attribute.cs (Attribute.Resolve): ditto.
29358
29359 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
29360
29361         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
29362
29363         * expression.cs (ParameterReference): Drop IStackStorage and implement
29364         IAssignMethod instead. 
29365
29366         (LocalVariableReference): ditto.
29367
29368         * ecore.cs (FieldExpr): Drop IStackStorage and implement
29369         IAssignMethod instead. 
29370
29371 2001-11-13  Miguel de Icaza <miguel@ximian.com>
29372
29373         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
29374         enumerations that are used in heavily used structures derive from
29375         byte in a laughable and pathetic attempt to reduce memory usage.
29376         This is the kind of pre-optimzations that you should not do at
29377         home without adult supervision.
29378
29379         * expression.cs (UnaryMutator): New class, used to handle ++ and
29380         -- separatedly from the other unary operators.  Cleans up the
29381         code, and kills the ExpressionStatement dependency in Unary.
29382
29383         (Unary): Removed `method' and `Arguments' from this class, making
29384         it smaller, and moving it all to SimpleCall, so I can reuse this
29385         code in other locations and avoid creating a lot of transient data
29386         strucutres when not required.
29387
29388         * cs-parser.jay: Adjust for new changes.
29389
29390 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
29391
29392         * enum.cs (Enum.Populate): If there is a failure during
29393         definition, return
29394
29395         * cs-parser.jay (opt_enum_base): we used to catch type errors
29396         here, but this is really incorrect.  The type error should be
29397         catched during semantic analysis.
29398
29399 2001-12-11  Ravi Pratap  <ravi@ximian.com>
29400
29401         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
29402         current_local_parameters as expected since I, in my stupidity, had forgotten
29403         to do this :-)
29404
29405         * attribute.cs (GetValidPlaces): Fix stupid bug.
29406
29407         * class.cs (Method::Emit): Perform check on applicability of attributes.
29408
29409         (Constructor::Emit): Ditto.
29410
29411         (Field::Emit): Ditto.
29412
29413         (Field.Location): Store location information.
29414
29415         (Property, Event, Indexer, Operator): Ditto.
29416
29417         * cs-parser.jay (field_declaration): Pass in location for each field.
29418
29419         * ../errors/cs0592.cs : Add.
29420
29421 2001-11-12  Ravi Pratap  <ravi@ximian.com>
29422
29423         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
29424
29425         (InitCoreTypes): Update accordingly.
29426
29427         (RegisterAttrType, LookupAttr): Implement.
29428
29429         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
29430         info about the same.
29431
29432         (Resolve): Update to populate the above as necessary.
29433
29434         (Error592): Helper.
29435
29436         (GetValidPlaces): Helper to the above.
29437
29438         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
29439
29440         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
29441
29442 2001-11-12  Ravi Pratap  <ravi@ximian.com>
29443
29444         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
29445
29446         * ../errors/cs0617.cs : Add.
29447
29448 2001-11-11  Ravi Pratap  <ravi@ximian.com>
29449
29450         * enum.cs (Emit): Rename to Populate to be more consistent with what
29451         we expect it to do and when exactly it is called.
29452
29453         * class.cs, rootcontext.cs : Update accordingly.
29454
29455         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
29456         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
29457
29458         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
29459
29460         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
29461         of a fieldinfo using the above, when dealing with a FieldBuilder.
29462
29463 2001-11-10  Ravi Pratap  <ravi@ximian.com>
29464
29465         * ../errors/cs0031.cs : Add.
29466
29467         * ../errors/cs1008.cs : Add.
29468
29469         * ../errrors/cs0543.cs : Add.
29470
29471         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
29472         enum type.
29473
29474         (FindMembers): Implement.
29475
29476         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
29477         enums and delegates too.
29478
29479         (enum_types): Rename to builder_to_enum.
29480
29481         (delegate_types): Rename to builder_to_delegate.
29482
29483         * delegate.cs (FindMembers): Implement.
29484
29485 2001-11-09  Ravi Pratap  <ravi@ximian.com>
29486
29487         * typemanager.cs (IsEnumType): Implement.
29488
29489         * enum.cs (Emit): Re-write parts to account for the underlying type
29490         better and perform checking etc.
29491
29492         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
29493         of the underlying type.
29494
29495         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
29496         value
29497
29498         * enum.cs (error31): Helper to report error #31.
29499
29500         * cs-parser.jay (enum_declaration): Store location of each member too.
29501
29502         * enum.cs (member_to_location): New hashtable. 
29503
29504         (AddEnumMember): Update location hashtable.
29505
29506         (Emit): Use the location of each member while reporting errors.
29507
29508 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
29509
29510         * cs-parser.jay: A for_initializer if is a
29511         local_variable_declaration really ammount to have an implicit
29512         block with the variable declaration and no initializer for for.
29513
29514         * statement.cs (For.Emit): Cope with null initializers.
29515
29516         This fixes the infinite loop on for initializers.
29517
29518 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
29519
29520         * enum.cs: More cleanup.
29521
29522         * ecore.cs: Remove dead code.
29523
29524         * class.cs (Property.Emit): More simplification.
29525         (Event.Emit): ditto.
29526
29527         Reworked to have less levels of indentation.
29528
29529 2001-11-08  Ravi Pratap  <ravi@ximian.com>
29530
29531         * class.cs (Property): Emit attributes.
29532
29533         (Field): Ditto.
29534
29535         (Event): Ditto.
29536
29537         (Indexer): Ditto.
29538
29539         (Operator): Ditto.
29540
29541         * enum.cs (Emit): Ditto.
29542
29543         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
29544         Enums too.
29545
29546         * class.cs (Field, Event, etc.): Move attribute generation into the
29547         Emit method everywhere.
29548
29549         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
29550         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
29551         as we had no way of defining nested enums !
29552
29553         * rootcontext.cs : Adjust code accordingly.
29554
29555         * typemanager.cs (AddEnumType): To keep track of enum types separately.
29556
29557 2001-11-07  Ravi Pratap  <ravi@ximian.com>
29558
29559         * expression.cs (EvalConstantExpression): Move into ecore.cs
29560
29561         * enum.cs (Enum): Rename some members and make them public and readonly
29562         according to our convention.
29563
29564         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
29565         nothing else.
29566
29567         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
29568
29569         (Enum::Emit): Write a simple version for now which doesn't try to compute
29570         expressions. I shall modify this to be more robust in just a while.
29571
29572         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
29573
29574         (TypeContainer::CloseType): Create the Enum types too.
29575
29576         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
29577
29578         * expression.cs (EvalConstantExpression): Get rid of completely.
29579
29580         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
29581         user-defined values and other cases.
29582
29583         (IsValidEnumLiteral): Helper function.
29584
29585         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
29586         out there in the case we had a literal FieldExpr.
29587
29588         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
29589
29590         (Literalize): Revamp a bit to take two arguments.
29591
29592         (EnumLiteral): New class which derives from Literal to wrap enum literals.
29593
29594 2001-11-06  Ravi Pratap  <ravi@ximian.com>
29595
29596         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
29597
29598         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
29599
29600         (Resolve): Use the above to ensure we have proper initializers.
29601
29602 2001-11-05  Ravi Pratap  <ravi@ximian.com>
29603
29604         * expression.cs (Expression::EvalConstantExpression): New method to 
29605         evaluate constant expressions.
29606
29607         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
29608
29609 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
29610
29611         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
29612         in an array.
29613
29614         (Binary.ResolveOperator): Handle operator != (object a, object b)
29615         and operator == (object a, object b);
29616
29617         (Binary.DoNumericPromotions): Indicate whether the numeric
29618         promotion was possible.
29619
29620         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
29621         Implement.  
29622
29623         Made the ArrayAccess implement interface IAssignMethod instead of
29624         IStackStore as the order in which arguments are passed reflects
29625         this.
29626
29627         * assign.cs: Instead of using expr.ExprClass to select the way of
29628         assinging, probe for the IStackStore/IAssignMethod interfaces.
29629
29630         * typemanager.cs: Load InitializeArray definition.
29631
29632         * rootcontext.cs (RootContext.MakeStaticData): Used to define
29633         static data that can be used to initialize arrays. 
29634
29635 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
29636
29637         * expression.cs: Handle operator== and operator!= for booleans.
29638
29639         (Conditioal.Reduce): Implement reducer for the ?: operator.
29640
29641         (Conditional.Resolve): Implement dead code elimination.
29642
29643         (Binary.Resolve): Catch string literals and return a new
29644         concatenated string.
29645
29646         (Unary.Reduce): Implement reduction of unary expressions.
29647
29648         * ecore.cs: Split out the expression core handling here.
29649
29650         (Expression.Reduce): New method used to perform constant folding
29651         and CSE.  This is needed to support constant-expressions. 
29652
29653         * statement.cs (Statement.EmitBoolExpression): Pass true and false
29654         targets, and optimize for !x.
29655
29656 2001-11-04  Ravi Pratap  <ravi@ximian.com>
29657
29658         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
29659         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
29660         set custom atttributes.
29661
29662         * literal.cs (Literal::GetValue): New abstract method to return the actual
29663         value of the literal, cast as an object.
29664
29665         (*Literal): Implement GetValue method.
29666
29667         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
29668         expressions to the arraylist but objects of type Argument.
29669
29670         * class.cs (TypeContainer::Emit): Emit our attributes too.
29671
29672         (Method::Emit, Constructor::Emit): Ditto.
29673
29674         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
29675         to be ignoring earlier.
29676
29677 2001-11-03  Ravi Pratap  <ravi@ximian.com>
29678
29679         * attribute.cs (AttributeSection::Define): Implement to do the business
29680         of constructing a CustomAttributeBuilder.
29681
29682         (Attribute): New trivial class. Increases readability of code.  
29683
29684         * cs-parser.jay : Update accordingly.
29685
29686         (positional_argument_list, named_argument_list, named_argument): New rules
29687
29688         (attribute_arguments): Use the above so that we are more correct.
29689
29690 2001-11-02  Ravi Pratap  <ravi@ximian.com>
29691
29692         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
29693         to perform all checks for a method with a params parameter.
29694
29695         (Invocation::OverloadResolve): Update to use the above method and therefore
29696         cope correctly with params method invocations.
29697
29698         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
29699         params too.
29700
29701         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
29702         constructors in our parent too because we can't afford to miss out on 
29703         protected ones ;-)
29704
29705         * attribute.cs (AttributeSection): New name for the class Attribute
29706
29707         Other trivial changes to improve readability.
29708
29709         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
29710         use the new class names.
29711
29712 2001-11-01  Ravi Pratap  <ravi@ximian.com>
29713
29714         * class.cs (Method::Define): Complete definition for params types too
29715
29716         (Indexer::Define): Ditto.
29717
29718         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
29719         Cope everywhere with a request for info about the array parameter.
29720
29721 2001-11-01  Ravi Pratap  <ravi@ximian.com>
29722
29723         * tree.cs (RecordNamespace): Fix up to check for the correct key.
29724
29725         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
29726         local_variable_type to extract the string corresponding to the type.
29727
29728         (local_variable_type): Fixup the action to use the new helper method.
29729
29730         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
29731         go.
29732
29733         * expression.cs : Clean out code which uses the above.
29734
29735 2001-10-31  Ravi Pratap  <ravi@ximian.com>
29736
29737         * typemanager.cs (RegisterMethod): Check if we already have an existing key
29738         and bale out if necessary by returning a false.
29739
29740         (RegisterProperty): Ditto.
29741
29742         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
29743         and print out appropriate error messages.
29744
29745         * interface.cs (everywhere): Ditto.
29746
29747         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
29748         location to constructor.
29749
29750         * class.cs (Property, Event, Indexer): Update accordingly.
29751
29752         * ../errors/cs111.cs : Added.
29753
29754         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
29755         of a method, as laid down by the spec.
29756
29757         (Invocation::OverloadResolve): Use the above method.
29758
29759 2001-10-31  Ravi Pratap  <ravi@ximian.com>
29760
29761         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
29762         now take a TypeContainer and a Parameters object.
29763
29764         (ParameterData): Modify return type of ParameterModifier method to be 
29765         Parameter.Modifier and not a string.
29766
29767         (ReflectionParameters, InternalParameters): Update accordingly.
29768
29769         * expression.cs (Argument::GetParameterModifier): Same here.
29770
29771         * support.cs (InternalParameters::ParameterType): Find a better way of determining
29772         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
29773         symbol in it at all so maybe this is only for now.
29774
29775 2001-10-30  Ravi Pratap  <ravi@ximian.com>
29776
29777         * support.cs (InternalParameters): Constructor now takes an extra argument 
29778         which is the actual Parameters class.
29779
29780         (ParameterDesc): Update to provide info on ref/out modifiers.
29781
29782         * class.cs (everywhere): Update call to InternalParameters to pass in
29783         the second argument too.
29784
29785         * support.cs (ParameterData): Add ParameterModifier, which is a method 
29786         to return the modifier info [ref/out etc]
29787
29788         (InternalParameters, ReflectionParameters): Implement the above.
29789
29790         * expression.cs (Argument::ParameterModifier): Similar function to return
29791         info about the argument's modifiers.
29792
29793         (Invocation::OverloadResolve): Update to take into account matching modifiers 
29794         too.
29795
29796         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
29797         a new SetFormalParameters object which we pass to InternalParameters.
29798
29799 2001-10-30  Ravi Pratap  <ravi@ximian.com>
29800
29801         * expression.cs (NewArray): Merge into the ArrayCreation class.
29802
29803 2001-10-29  Ravi Pratap  <ravi@ximian.com>
29804
29805         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
29806         NewUserdefinedArray into one as there wasn't much of a use in having
29807         two separate ones.
29808
29809         * expression.cs (Argument): Change field's name to ArgType from Type.
29810
29811         (Type): New readonly property which returns the proper type, taking into 
29812         account ref/out modifiers.
29813
29814         (everywhere): Adjust code accordingly for the above.
29815
29816         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
29817         whether we are emitting for a ref or out parameter.
29818
29819         * expression.cs (Argument::Emit): Use the above field to set the state.
29820
29821         (LocalVariableReference::Emit): Update to honour the flag and emit the
29822         right stuff.
29823
29824         * parameter.cs (Attributes): Set the correct flags for ref parameters.
29825
29826         * expression.cs (Argument::FullDesc): New function to provide a full desc.
29827
29828         * support.cs (ParameterData): Add method ParameterDesc to the interface.
29829
29830         (ReflectionParameters, InternalParameters): Implement the above method.
29831
29832         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
29833         reporting errors.
29834
29835         (Invocation::FullMethodDesc): Ditto. 
29836
29837 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
29838
29839         * cs-parser.jay: Add extra production for the second form of array
29840         creation. 
29841
29842         * expression.cs (ArrayCreation): Update to reflect the above
29843         change. 
29844
29845         * Small changes to prepare for Array initialization.
29846
29847 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
29848
29849         * typemanager.cs (ImplementsInterface): interface might be null;
29850         Deal with this problem;
29851
29852         Also, we do store negative hits on the cache (null values), so use
29853         this instead of calling t.GetInterfaces on the type everytime.
29854
29855 2001-10-28  Ravi Pratap  <ravi@ximian.com>
29856
29857         * typemanager.cs (IsBuiltinType): New method to help determine the same.
29858
29859         * expression.cs (New::DoResolve): Get rid of array creation code and instead
29860         split functionality out into different classes.
29861
29862         (New::FormArrayType): Move into NewBuiltinArray.
29863
29864         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
29865         quite useless.
29866
29867         (NewBuiltinArray): New class to handle creation of built-in arrays.
29868
29869         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
29870         account creation of one-dimensional arrays.
29871
29872         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
29873
29874         (NewUserdefinedArray::DoResolve): Implement.
29875
29876         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
29877
29878         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
29879         we maintain inside the TypeManager. This is necessary to perform lookups on the
29880         module builder.
29881
29882         (LookupType): Update to perform GetType on the module builders too.     
29883
29884         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
29885
29886         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
29887
29888 2001-10-23  Ravi Pratap  <ravi@ximian.com>
29889
29890         * expression.cs (New::DoResolve): Implement guts of array creation.
29891
29892         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
29893
29894 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
29895
29896         * expression.cs: Fix bug I introduced lsat night that broke
29897         Delegates. 
29898
29899         (Expression.Resolve): Report a 246 error (can not resolve name)
29900         if we find a SimpleName in the stream.
29901
29902         (Expression.ResolveLValue): Ditto.
29903
29904         (Expression.ResolveWithSimpleName): This function is a variant of
29905         ResolveName, this one allows SimpleNames to be returned without a
29906         warning.  The only consumer of SimpleNames is MemberAccess
29907
29908 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
29909
29910         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
29911         might arrive here.  I have my doubts that this is correct.
29912
29913         * statement.cs (Lock): Implement lock statement.
29914
29915         * cs-parser.jay: Small fixes to support `lock' and `using'
29916
29917         * cs-tokenizer.cs: Remove extra space
29918
29919         * driver.cs: New flag --checked, allows to turn on integer math
29920         checking. 
29921
29922         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
29923         Threading.Monitor.Exit 
29924
29925 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
29926
29927         * expression.cs (IndexerAccess::DoResolveLValue): Set the
29928         Expression Class to be IndexerAccess.
29929
29930         Notice that Indexer::DoResolve sets the eclass to Value.
29931
29932 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
29933
29934         * class.cs (TypeContainer::Emit): Emit code for indexers.
29935
29936         * assign.cs (IAssignMethod): New interface implemented by Indexers
29937         and Properties for handling assignment.
29938
29939         (Assign::Emit): Simplify and reuse code. 
29940
29941         * expression.cs (IndexerAccess, PropertyExpr): Implement
29942         IAssignMethod, clean up old code. 
29943
29944 2001-10-22  Ravi Pratap  <ravi@ximian.com>
29945
29946         * typemanager.cs (ImplementsInterface): New method to determine if a type
29947         implements a given interface. Provides a nice cache too.
29948
29949         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
29950         method.
29951
29952         (ConvertReferenceExplicit): Ditto.
29953
29954         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
29955         various methods, with correct names etc.
29956
29957         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
29958         Operator.UnaryNegation.
29959
29960         * cs-parser.jay (operator_declarator): Be a little clever in the case where
29961         we have a unary plus or minus operator.
29962
29963         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
29964         UnaryMinus.
29965
29966         * everywhere : update accordingly.
29967
29968         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
29969         respectively.
29970
29971         * class.cs (Method::Define): For the case where we are implementing a method
29972         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
29973         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
29974
29975 2001-10-21  Ravi Pratap  <ravi@ximian.com>
29976
29977         * interface.cs (FindMembers): Implement to work around S.R.E
29978         lameness.
29979
29980         * typemanager.cs (IsInterfaceType): Implement.
29981
29982         (FindMembers): Update to handle interface types too.
29983
29984         * expression.cs (ImplicitReferenceConversion): Re-write bits which
29985         use IsAssignableFrom as that is not correct - it doesn't work.
29986
29987         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
29988         and accordingly override EmitStatement.
29989
29990         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
29991         using the correct logic :-)
29992
29993 2001-10-19  Ravi Pratap  <ravi@ximian.com>
29994
29995         * ../errors/cs-11.cs : Add to demonstrate error -11 
29996
29997 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
29998
29999         * assign.cs (Assign::Resolve): Resolve right hand side first, and
30000         then pass this as a hint to ResolveLValue.
30001
30002         * expression.cs (FieldExpr): Add Location information
30003
30004         (FieldExpr::LValueResolve): Report assignment to readonly
30005         variable. 
30006
30007         (Expression::ExprClassFromMemberInfo): Pass location information.
30008
30009         (Expression::ResolveLValue): Add new method that resolves an
30010         LValue. 
30011
30012         (Expression::DoResolveLValue): Default invocation calls
30013         DoResolve. 
30014
30015         (Indexers): New class used to keep track of indexers in a given
30016         Type. 
30017
30018         (IStackStore): Renamed from LValue, as it did not really describe
30019         what this did.  Also ResolveLValue is gone from this interface and
30020         now is part of Expression.
30021
30022         (ElementAccess): Depending on the element access type
30023
30024         * typemanager.cs: Add `indexer_name_type' as a Core type
30025         (System.Runtime.CompilerServices.IndexerNameAttribute)
30026
30027         * statement.cs (Goto): Take a location.
30028
30029 2001-10-18  Ravi Pratap  <ravi@ximian.com>
30030
30031         * delegate.cs (Delegate::VerifyDelegate): New method to verify
30032         if two delegates are compatible.
30033
30034         (NewDelegate::DoResolve): Update to take care of the case when
30035         we instantiate a delegate from another delegate.
30036
30037         * typemanager.cs (FindMembers): Don't even try to look up members
30038         of Delegate types for now.
30039
30040 2001-10-18  Ravi Pratap  <ravi@ximian.com>
30041
30042         * delegate.cs (NewDelegate): New class to take care of delegate
30043         instantiation.
30044
30045         * expression.cs (New): Split the delegate related code out into 
30046         the NewDelegate class.
30047
30048         * delegate.cs (DelegateInvocation): New class to handle delegate 
30049         invocation.
30050
30051         * expression.cs (Invocation): Split out delegate related code into
30052         the DelegateInvocation class.
30053
30054 2001-10-17  Ravi Pratap  <ravi@ximian.com>
30055
30056         * expression.cs (New::DoResolve): Implement delegate creation fully
30057         and according to the spec.
30058
30059         (New::DoEmit): Update to handle delegates differently.
30060
30061         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
30062         because of which we were printing out arguments in reverse order !
30063
30064         * delegate.cs (VerifyMethod): Implement to check if the given method
30065         matches the delegate.
30066
30067         (FullDelegateDesc): Implement.
30068
30069         (VerifyApplicability): Implement.
30070
30071         * expression.cs (Invocation::DoResolve): Update to accordingly handle
30072         delegate invocations too.
30073
30074         (Invocation::Emit): Ditto.
30075
30076         * ../errors/cs1593.cs : Added.
30077
30078         * ../errors/cs1594.cs : Added.
30079
30080         * delegate.cs (InstanceExpression, TargetMethod): New properties.
30081
30082 2001-10-16  Ravi Pratap  <ravi@ximian.com>
30083
30084         * typemanager.cs (intptr_type): Core type for System.IntPtr
30085
30086         (InitCoreTypes): Update for the same.
30087
30088         (iasyncresult_type, asynccallback_type): Ditto.
30089
30090         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
30091         correct.
30092
30093         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
30094         too.
30095
30096         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
30097         the builders for the 4 members of a delegate type :-)
30098
30099         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
30100         type.
30101
30102         * expression.cs (New::DoResolve): Implement guts for delegate creation.
30103
30104         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
30105
30106 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
30107
30108         * statement.cs (Break::Emit): Implement.   
30109         (Continue::Emit): Implement.
30110
30111         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30112         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30113         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30114         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
30115         end loop
30116
30117         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
30118         properties that track the label for the current loop (begin of the
30119         loop and end of the loop).
30120
30121 2001-10-15  Ravi Pratap  <ravi@ximian.com>
30122
30123         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
30124         use of emitting anything at all.
30125
30126         * class.cs, rootcontext.cs : Get rid of calls to the same.
30127
30128         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
30129
30130         (Populate): Define the constructor correctly and set the implementation
30131         attributes.
30132
30133         * typemanager.cs (delegate_types): New hashtable to hold delegates that
30134         have been defined.
30135
30136         (AddDelegateType): Implement.
30137
30138         (IsDelegateType): Implement helper method.
30139
30140         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
30141
30142         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
30143         and accordingly handle it.
30144
30145         * delegate.cs (Populate): Take TypeContainer argument.
30146         Implement bits to define the Invoke method. However, I still haven't figured out
30147         how to take care of the native int bit :-(
30148
30149         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
30150         Qualify the name of the delegate, not its return type !
30151
30152         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
30153         conversion.
30154
30155         (StandardConversionExists): Checking for array types turns out to be recursive.
30156
30157         (ConvertReferenceExplicit): Implement array conversion.
30158
30159         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
30160
30161 2001-10-12  Ravi Pratap  <ravi@ximian.com>
30162
30163         * cs-parser.jay (delegate_declaration): Store the fully qualified
30164         name as it is a type declaration.
30165
30166         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
30167         readonly.
30168
30169         (DefineDelegate): Renamed from Define. Does the same thing essentially,
30170         as TypeContainer::DefineType.
30171
30172         (Populate): Method in which all the definition of the various methods (Invoke)
30173         etc is done.
30174
30175         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
30176         see.
30177
30178         (CloseDelegate): Finally creates the delegate.
30179
30180         * class.cs (TypeContainer::DefineType): Update to define delegates.
30181         (Populate, Emit and CloseType): Do the same thing here too.
30182
30183         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
30184         delegates in all these operations.
30185
30186 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
30187
30188         * expression.cs: LocalTemporary: a new expression used to
30189         reference a temporary that has been created.
30190
30191         * assign.cs: Handle PropertyAccess back here, so that we can
30192         provide the proper semantic access to properties.
30193
30194         * expression.cs (Expression::ConvertReferenceExplicit): Implement
30195         a few more explicit conversions. 
30196
30197         * modifiers.cs: `NEW' modifier maps to HideBySig.
30198
30199         * expression.cs (PropertyExpr): Make this into an
30200         ExpressionStatement, and support the EmitStatement code path. 
30201
30202         Perform get/set error checking, clean up the interface.
30203
30204         * assign.cs: recognize PropertyExprs as targets, and if so, turn
30205         them into toplevel access objects.
30206
30207 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
30208
30209         * expression.cs: PropertyExpr::PropertyExpr: use work around the
30210         SRE.
30211
30212         * typemanager.cs: Keep track here of our PropertyBuilders again to
30213         work around lameness in SRE.
30214
30215 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
30216
30217         * expression.cs (LValue::LValueResolve): New method in the
30218         interface, used to perform a second resolution pass for LValues. 
30219
30220         (This::DoResolve): Catch the use of this in static methods.
30221
30222         (This::LValueResolve): Implement.
30223
30224         (This::Store): Remove warning, assigning to `this' in structures
30225         is 
30226
30227         (Invocation::Emit): Deal with invocation of
30228         methods on value types.  We need to pass the address to structure
30229         methods rather than the object itself.  (The equivalent code to
30230         emit "this" for structures leaves the entire structure on the
30231         stack instead of a pointer to it). 
30232
30233         (ParameterReference::DoResolve): Compute the real index for the
30234         argument based on whether the method takes or not a `this' pointer
30235         (ie, the method is static).
30236
30237         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
30238         value types returned from functions when we need to invoke a
30239         method on the sturcture.
30240
30241
30242 2001-10-11  Ravi Pratap  <ravi@ximian.com>
30243
30244         * class.cs (TypeContainer::DefineType): Method to actually do the business of
30245         defining the type in the Modulebuilder or Typebuilder. This is to take
30246         care of nested types which need to be defined on the TypeBuilder using
30247         DefineNestedMethod.
30248
30249         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
30250         methods in RootContext, only ported to be part of TypeContainer.
30251
30252         (TypeContainer::GetInterfaceOrClass): Ditto.
30253
30254         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
30255
30256         * interface.cs (Interface::DefineInterface): New method. Does exactly
30257         what RootContext.CreateInterface did earlier, only it takes care of nested types 
30258         too.
30259
30260         (Interface::GetInterfaces): Move from RootContext here and port.
30261
30262         (Interface::GetInterfaceByName): Same here.
30263
30264         * rootcontext.cs (ResolveTree): Re-write.
30265
30266         (PopulateTypes): Re-write.
30267
30268         * class.cs (TypeContainer::Populate): Populate nested types too.
30269         (TypeContainer::Emit): Emit nested members too.
30270
30271         * typemanager.cs (AddUserType): Do not make use of the FullName property,
30272         instead just use the name argument passed in as it is already fully
30273         qualified.
30274
30275         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
30276         to TypeContainer mapping to see if a type is user-defined.
30277
30278         * class.cs (TypeContainer::CloseType): Implement. 
30279
30280         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
30281         the default constructor.
30282
30283         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
30284         twice.
30285
30286         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
30287
30288         * interface.cs (CloseType): Create the type here.
30289
30290         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
30291         the hierarchy.
30292
30293         Remove all the methods which are now in TypeContainer.
30294
30295 2001-10-10  Ravi Pratap  <ravi@ximian.com>
30296
30297         * delegate.cs (Define): Re-write bits to define the delegate
30298         correctly.
30299
30300 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
30301
30302         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
30303
30304         * expression.cs (ImplicitReferenceConversion): handle null as well
30305         as a source to convert to any reference type.
30306
30307         * statement.cs (Return): Perform any implicit conversions to
30308         expected return type.  
30309
30310         Validate use of return statement.  
30311
30312         * codegen.cs (EmitContext): Pass the expected return type here.
30313
30314         * class.cs (Method, Constructor, Property): Pass expected return
30315         type to EmitContext.
30316
30317 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
30318
30319         * expression.cs: Make DoResolve take an EmitContext instead of a
30320         TypeContainer.
30321
30322         Replaced `l' and `location' for `loc', for consistency.
30323
30324         (Error, Warning): Remove unneeded Tc argument.
30325
30326         * assign.cs, literal.cs, constant.cs: Update to new calling
30327         convention. 
30328
30329         * codegen.cs: EmitContext now contains a flag indicating whether
30330         code is being generated in a static method or not.
30331
30332         * cs-parser.jay: DecomposeQI, new function that replaces the old
30333         QualifiedIdentifier.  Now we always decompose the assembled
30334         strings from qualified_identifier productions into a group of
30335         memberaccesses.
30336
30337 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
30338
30339         * rootcontext.cs: Deal with field-less struct types correctly now
30340         by passing the size option to Define Type.
30341
30342         * class.cs: Removed hack that created one static field. 
30343
30344 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
30345
30346         * statement.cs: Moved most of the code generation here. 
30347
30348 2001-10-09  Ravi Pratap  <ravi@ximian.com>
30349
30350         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
30351         seem very right.
30352
30353         (ElementAccess): Remove useless bits for now - keep checks as the spec
30354         says.
30355
30356 2001-10-08  Ravi Pratap  <ravi@ximian.com>
30357
30358         * expression.cs (ElementAccess::DoResolve): Remove my crap code
30359         and start performing checks according to the spec.
30360
30361 2001-10-07  Ravi Pratap  <ravi@ximian.com>
30362
30363         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
30364         rank_specifiers instead.
30365
30366         (rank_specifiers): Change the order in which the rank specifiers are stored
30367
30368         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
30369
30370         * expression.cs (ElementAccess): Implement the LValue interface too.
30371
30372 2001-10-06  Ravi Pratap  <ravi@ximian.com>
30373
30374         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
30375         except that user defined conversions are not included.
30376
30377         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
30378         perform the conversion of the return type, if necessary.
30379
30380         (New::DoResolve): Check whether we are creating an array or an object
30381         and accordingly do the needful.
30382
30383         (New::Emit): Same here.
30384
30385         (New::DoResolve): Implement guts of array creation.
30386
30387         (New::FormLookupType): Helper function.
30388
30389 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
30390
30391         * codegen.cs: Removed most of the code generation here, and move the
30392         corresponding code generation bits to the statement classes. 
30393
30394         Added support for try/catch/finalize and throw.
30395
30396         * cs-parser.jay: Added support for try/catch/finalize.
30397
30398         * class.cs: Catch static methods having the flags override,
30399         virtual or abstract.
30400
30401         * expression.cs (UserCast): This user cast was not really doing
30402         what it was supposed to do.  Which is to be born in fully resolved
30403         state.  Parts of the resolution were being performed at Emit time! 
30404
30405         Fixed this code.
30406
30407 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
30408
30409         * expression.cs: Implicity convert the result from UserCast.
30410
30411 2001-10-05  Ravi Pratap  <ravi@ximian.com>
30412
30413         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
30414         prevented it from working correctly. 
30415
30416         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
30417         merely ConvertImplicit.
30418
30419 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
30420
30421         * typemanager.cs: Make the LookupTypeContainer function static,
30422         and not per-instance.  
30423
30424         * class.cs: Make static FindMembers (the one that takes a Type
30425         argument). 
30426
30427         * codegen.cs: Add EmitForeach here.
30428
30429         * cs-parser.jay: Make foreach a toplevel object instead of the
30430         inline expansion, as we need to perform semantic analysis on it. 
30431
30432 2001-10-05  Ravi Pratap  <ravi@ximian.com>
30433
30434         * expression.cs (Expression::ImplicitUserConversion): Rename to
30435         UserDefinedConversion.
30436
30437         (Expression::UserDefinedConversion): Take an extra argument specifying 
30438         whether we look for explicit user conversions too.
30439
30440         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
30441
30442         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
30443
30444         (ExplicitUserConversion): Make it a call to UserDefinedConversion
30445         with the appropriate arguments.
30446
30447         * cs-parser.jay (cast_expression): Record location too.
30448
30449         * expression.cs (Cast): Record location info.
30450
30451         (Expression::ConvertExplicit): Take location argument.
30452
30453         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
30454         to determine if we are doing explicit conversions.
30455
30456         (UserCast::Emit): Update accordingly.
30457
30458         (Expression::ConvertExplicit): Report an error if everything fails.
30459
30460         * ../errors/cs0030.cs : Add.
30461
30462 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
30463
30464         * modifiers.cs: If the ABSTRACT keyword is present, also set the
30465         virtual and newslot bits. 
30466
30467         * class.cs (TypeContainer::RegisterRequiredImplementations):
30468         Record methods we need.
30469
30470         (TypeContainer::MakeKey): Helper function to make keys for
30471         MethodBases, since the Methodbase key is useless.
30472
30473         (TypeContainer::Populate): Call RegisterRequiredImplementations
30474         before defining the methods.   
30475
30476         Create a mapping for method_builders_to_methods ahead of time
30477         instead of inside a tight loop.
30478
30479         (::RequireMethods):  Accept an object as the data to set into the
30480         hashtable so we can report interface vs abstract method mismatch.
30481
30482 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
30483
30484         * report.cs: Make all of it static.
30485
30486         * rootcontext.cs: Drop object_type and value_type computations, as
30487         we have those in the TypeManager anyways.
30488
30489         Drop report instance variable too, now it is a global.
30490
30491         * driver.cs: Use try/catch on command line handling.
30492
30493         Add --probe option to debug the error reporting system with a test
30494         suite. 
30495
30496         * report.cs: Add support for exiting program when a probe
30497         condition is reached.
30498
30499 2001-10-03  Ravi Pratap  <ravi@ximian.com>
30500
30501         * expression.cs (Binary::DoNumericPromotions): Fix the case when
30502         we do a forcible conversion regardless of type, to check if 
30503         ForceConversion returns a null.
30504
30505         (Binary::error19): Use location to report error.
30506
30507         (Unary::error23): Use location here too.
30508
30509         * ../errors/cs0019.cs : Check in.
30510
30511         * ../errors/cs0023.cs : Check in.
30512
30513         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
30514         case of a non-null MethodInfo object with a length of 0 !
30515
30516         (Binary::ResolveOperator): Flag error if overload resolution fails to find
30517         an applicable member - according to the spec :-)
30518         Also fix logic to find members in base types.
30519
30520         (Unary::ResolveOperator): Same here.
30521
30522         (Unary::report23): Change name to error23 and make first argument a TypeContainer
30523         as I was getting thoroughly confused between this and error19 :-)
30524
30525         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
30526         (::FindMostEncompassedType): Implement.
30527         (::FindMostEncompassingType): Implement.
30528         (::StandardConversionExists): Implement.
30529
30530         (UserImplicitCast): Re-vamp. We now need info about most specific
30531         source and target types so that we can do the necessary conversions.
30532
30533         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
30534         mathematical union with no duplicates.
30535
30536 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
30537
30538         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
30539         in order from base classes to child classes, so that we can in
30540         child classes look up in our parent for method names and
30541         attributes (required for handling abstract, virtual, new, override
30542         constructs: we need to instrospect our base class, and if we dont
30543         populate the classes in order, the introspection might be
30544         incorrect.  For example, a method could query its parent before
30545         the parent has any methods and would determine that the parent has
30546         no abstract methods (while it could have had them)).
30547
30548         (RootContext::CreateType): Record the order in which we define the
30549         classes.
30550
30551 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
30552
30553         * class.cs (TypeContainer::Populate): Also method definitions can
30554         fail now, keep track of this.
30555
30556         (TypeContainer::FindMembers): Implement support for
30557         DeclaredOnly/noDeclaredOnly flag.
30558
30559         (Constructor::Emit) Return the ConstructorBuilder.
30560
30561         (Method::Emit) Return the MethodBuilder. 
30562         Check for abstract or virtual methods to be public.
30563
30564         * rootcontext.cs (RootContext::CreateType): Register all the
30565         abstract methods required for the class to be complete and the
30566         interface methods that must be implemented. 
30567
30568         * cs-parser.jay: Report error 501 (method requires body if it is
30569         not marked abstract or extern).
30570
30571         * expression.cs (TypeOf::Emit): Implement.
30572
30573         * typemanager.cs: runtime_handle_type, new global type.
30574
30575         * class.cs (Property::Emit): Generate code for properties.
30576
30577 2001-10-02  Ravi Pratap  <ravi@ximian.com>
30578
30579         * expression.cs (Unary::ResolveOperator): Find operators on base type
30580         too - we now conform exactly to the spec.
30581
30582         (Binary::ResolveOperator): Same here.
30583
30584         * class.cs (Operator::Define): Fix minor quirk in the tests.
30585
30586         * ../errors/cs0215.cs : Added.
30587
30588         * ../errors/cs0556.cs : Added.
30589
30590         * ../errors/cs0555.cs : Added.
30591
30592 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
30593
30594         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
30595         single integer which is really efficient
30596
30597 2001-10-01  Ravi Pratap  <ravi@ximian.com>
30598
30599         *  expression.cs (Expression::ImplicitUserConversion): Use location
30600         even in the case when we are examining True operators.
30601  
30602         * class.cs (Operator::Define): Perform extensive checks to conform
30603         with the rules for operator overloading in the spec.
30604
30605         * expression.cs (Expression::ImplicitReferenceConversion): Implement
30606         some of the other conversions mentioned in the spec.
30607
30608         * typemanager.cs (array_type): New static member for the System.Array built-in
30609         type.
30610
30611         (cloneable_interface): For System.ICloneable interface.
30612
30613         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
30614         we start resolving the tree and populating types.
30615
30616         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
30617  
30618 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
30619
30620         * expression.cs (Expression::ExprClassFromMemberInfo,
30621         Expression::Literalize): Create literal expressions from
30622         FieldInfos which are literals.
30623
30624         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
30625         type casts, because they were wrong.  The test suite in tests
30626         caught these ones.
30627
30628         (ImplicitNumericConversion): ushort to ulong requires a widening
30629         cast. 
30630
30631         Int32 constant to long requires widening cast as well.
30632
30633         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
30634         for integers because the type on the stack is not i4.
30635
30636 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
30637
30638         * expression.cs (report118): require location argument. 
30639
30640         * parameter.cs: Do not dereference potential null value.
30641
30642         * class.cs: Catch methods that lack the `new' keyword when
30643         overriding a name.  Report warnings when `new' is used without
30644         anything being there to override.
30645
30646         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
30647
30648         * class.cs: Only add constructor to hashtable if it is non-null
30649         (as now constructors can fail on define).
30650
30651         (TypeManager, Class, Struct): Take location arguments.
30652
30653         Catch field instance initialization in structs as errors.
30654
30655         accepting_filter: a new filter for FindMembers that is static so
30656         that we dont create an instance per invocation.
30657
30658         (Constructor::Define): Catch errors where a struct constructor is
30659         parameterless 
30660
30661         * cs-parser.jay: Pass location information for various new
30662         constructs. 
30663
30664         * delegate.cs (Delegate): take a location argument.
30665
30666         * driver.cs: Do not call EmitCode if there were problesm in the
30667         Definition of the types, as many Builders wont be there. 
30668
30669         * decl.cs (Decl::Decl): Require a location argument.
30670
30671         * cs-tokenizer.cs: Handle properly hex constants that can not fit
30672         into integers, and find the most appropiate integer for it.
30673
30674         * literal.cs: Implement ULongLiteral.
30675
30676         * rootcontext.cs: Provide better information about the location of
30677         failure when CreateType fails.
30678
30679 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
30680
30681         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
30682         as well.
30683
30684         * expression.cs (Binary::CheckShiftArguments): Add missing type
30685         computation.
30686         (Binary::ResolveOperator): Add type to the logical and and logical
30687         or, Bitwise And/Or and Exclusive Or code paths, it was missing
30688         before.
30689
30690         (Binary::DoNumericPromotions): In the case where either argument
30691         is ulong (and most signed types combined with ulong cause an
30692         error) perform implicit integer constant conversions as well.
30693
30694 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
30695
30696         * expression.cs (UserImplicitCast): Method should always be
30697         non-null. 
30698         (Invocation::BetterConversion): Simplified test for IntLiteral.
30699
30700         (Expression::ImplicitNumericConversion): Split this routine out.
30701         Put the code that performs implicit constant integer conversions
30702         here. 
30703
30704         (Expression::Resolve): Become a wrapper around DoResolve so we can
30705         check eclass and type being set after resolve.
30706
30707         (Invocation::Badness): Remove this dead function
30708
30709         (Binary::ResolveOperator): Do not compute the expensive argumnets
30710         unless we have a union for it.
30711
30712         (Probe::Emit): Is needs to do an isinst and then
30713         compare against null.
30714
30715         (::CanConvert): Added Location argument.  If the Location argument
30716         is null (Location.Null), then we do not report errors.  This is
30717         used by the `probe' mechanism of the Explicit conversion.  We do
30718         not want to generate an error for something that the user
30719         explicitly requested to be casted.  But the pipeline for an
30720         explicit cast first tests for potential implicit casts.
30721
30722         So for now, if the Location is null, it means `Probe only' to
30723         avoid adding another argument.   Might have to revise this
30724         strategy later.
30725
30726         (ClassCast): New class used to type cast objects into arbitrary
30727         classes (used in Explicit Reference Conversions).
30728
30729         Implement `as' as well.
30730
30731         Reverted all the patches from Ravi below: they were broken:
30732
30733                 * The use of `level' as a mechanism to stop recursive
30734                   invocations is wrong.  That was there just to catch the
30735                   bug with a strack trace but not as a way of addressing
30736                   the problem.
30737
30738                   To fix the problem we have to *understand* what is going
30739                   on and the interactions and come up with a plan, not
30740                   just get things going.
30741
30742                 * The use of the type conversion cache that I proposed
30743                   last night had an open topic: How does this work across
30744                   protection domains.  A user defined conversion might not
30745                   be public in the location where we are applying the
30746                   conversion, a different conversion might be selected
30747                   (ie, private A->B (better) but public B->A (worse),
30748                   inside A, A->B applies, but outside it, B->A will
30749                   apply).
30750
30751                 * On top of that (ie, even if the above is solved),
30752                   conversions in a cache need to be abstract.  Ie, `To
30753                   convert from an Int to a Short use an OpcodeCast', not
30754                   `To convert from an Int to a Short use the OpcodeCast on
30755                   the variable 5' (which is what this patch was doing).
30756
30757 2001-09-28  Ravi Pratap  <ravi@ximian.com>
30758
30759         * expression.cs (Invocation::ConversionExists): Re-write to use
30760         the conversion cache
30761
30762         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
30763         cache all conversions done, not just user-defined ones.
30764
30765         (Invocation::BetterConversion): The real culprit. Use ConversionExists
30766         to determine if a conversion exists instead of acutually trying to 
30767         perform the conversion. It's faster too.
30768
30769         (Expression::ConvertExplicit): Modify to use ConversionExists to check
30770         and only then attempt the implicit conversion.
30771
30772 2001-09-28  Ravi Pratap  <ravi@ximian.com>
30773
30774         * expression.cs (ConvertImplicit): Use a cache for conversions
30775         already found. Check level of recursion and bail out if necessary.
30776
30777 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
30778
30779         * typemanager.cs (string_concat_string_string, string_concat_object_object):
30780         Export standard methods that we expect for string operations.
30781
30782         * statement.cs (Block::UsageWarning): Track usage of variables and
30783         report the errors for not used variables.
30784
30785         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
30786         operator. 
30787
30788 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
30789
30790         * codegen.cs: remove unnneded code 
30791
30792         * expression.cs: Removed BuiltinTypeAccess class
30793
30794         Fix the order in which implicit conversions are
30795         done.  
30796
30797         The previous fixed dropped support for boxed conversions (adding a
30798         test to the test suite now)
30799
30800         (UserImplicitCast::CanConvert): Remove test for source being null,
30801         that code is broken.  We should not feed a null to begin with, if
30802         we do, then we should track the bug where the problem originates
30803         and not try to cover it up here.
30804
30805         Return a resolved expression of type UserImplicitCast on success
30806         rather than true/false.  Ravi: this is what I was talking about,
30807         the pattern is to use a static method as a "constructor" for
30808         objects. 
30809
30810         Also, do not create arguments until the very last minute,
30811         otherwise we always create the arguments even for lookups that
30812         will never be performed. 
30813
30814         (UserImplicitCast::Resolve): Eliminate, objects of type
30815         UserImplicitCast are born in a fully resolved state. 
30816
30817         * typemanager.cs (InitCoreTypes): Init also value_type
30818         (System.ValueType). 
30819
30820         * expression.cs (Cast::Resolve): First resolve the child expression.
30821
30822         (LValue): Add new method AddressOf to be used by
30823         the `&' operator.  
30824
30825         Change the argument of Store to take an EmitContext instead of an
30826         ILGenerator, because things like FieldExpr need to be able to call
30827         their children expression to generate the instance code. 
30828
30829         (Expression::Error, Expression::Warning): Sugar functions for
30830         reporting errors.
30831
30832         (Expression::MemberLookup): Accept a TypeContainer instead of a
30833         Report as the first argument.
30834
30835         (Expression::ResolvePrimary): Killed.  I still want to improve
30836         this as currently the code is just not right.
30837
30838         (Expression::ResolveMemberAccess): Simplify, but it is still
30839         wrong. 
30840
30841         (Unary::Resolve): Catch errors in AddressOf operators.
30842
30843         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
30844         index to a byte for the short-version, or the compiler will choose
30845         the wrong Emit call, which generates the wrong data.
30846
30847         (ParameterReference::Emit, ::Store): same.
30848
30849         (FieldExpr::AddressOf): Implement.
30850
30851         * typemanager.cs: TypeManager: made public variable instead of
30852         property.
30853
30854         * driver.cs: document --fatal.
30855
30856         * report.cs (ErrorMessage, WarningMessage): new names for the old
30857         Error and Warning classes.
30858
30859         * cs-parser.jay (member_access): Turn built-in access to types
30860         into a normal simplename
30861
30862 2001-09-27  Ravi Pratap  <ravi@ximian.com>
30863
30864         * expression.cs (Invocation::BetterConversion): Fix to cope
30865         with q being null, since this was introducing a bug.
30866
30867         * expression.cs (ConvertImplicit): Do built-in conversions first.
30868
30869 2001-09-27  Ravi Pratap  <ravi@ximian.com>
30870
30871         * expression.cs (UserImplicitCast::Resolve): Fix bug.
30872
30873 2001-09-27  Ravi Pratap  <ravi@ximian.com>
30874
30875         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
30876         I had introduced long ago (what's new ?).
30877
30878         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
30879         the work of all the checking. 
30880         (ConvertImplicit): Call CanConvert and only then create object if necessary.
30881         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
30882
30883         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
30884         that is the right way. 
30885
30886         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
30887         overloading resolution. Use everywhere instead of cutting and pasting code.
30888
30889         (Binary::ResolveOperator): Use MakeUnionSet.
30890
30891         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
30892         we have to convert to bool types. Not complete yet.
30893
30894 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
30895
30896         * typemanager.cs (TypeManager::CSharpName): support ushort.
30897
30898         * expression.cs (Expression::TryImplicitIntConversion): Attempts
30899         to provide an expression that performsn an implicit constant int
30900         conversion (section 6.1.6).
30901         (Expression::ConvertImplicitRequired): Reworked to include
30902         implicit constant expression conversions.
30903
30904         (Expression::ConvertNumericExplicit): Finished.
30905
30906         (Invocation::Emit): If InstanceExpression is null, then it means
30907         that we perform a call on this.
30908
30909 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
30910
30911         * expression.cs (Unary::Emit): Remove some dead code.
30912         (Probe): Implement Resolve and Emit for `is'.
30913         (Expression::ConvertImplicitRequired): Attempt to do constant
30914         expression conversions here.  Maybe should be moved to
30915         ConvertImplicit, but I am not sure.
30916         (Expression::ImplicitLongConstantConversionPossible,
30917         Expression::ImplicitIntConstantConversionPossible): New functions
30918         that tell whether is it possible to apply an implicit constant
30919         expression conversion.
30920
30921         (ConvertNumericExplicit): Started work on explicit numeric
30922         conversions.
30923
30924         * cs-parser.jay: Update operator constants.
30925
30926         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
30927         (Parameters::GetSignature): Hook up VerifyArgs here.
30928         (Parameters::VerifyArgs): Verifies that no two arguments have the
30929         same name. 
30930
30931         * class.cs (Operator): Update the operator names to reflect the
30932         ones that the spec expects (as we are just stringizing the
30933         operator names).
30934
30935         * expression.cs (Unary::ResolveOperator): Fix bug: Use
30936         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
30937         previous usage did only work for our methods.
30938         (Expression::ConvertImplicit): Handle decimal implicit numeric
30939         conversions as well.
30940         (Expression::InternalTypeConstructor): Used to invoke constructors
30941         on internal types for default promotions.
30942
30943         (Unary::Emit): Implement special handling for the pre/post
30944         increment/decrement for overloaded operators, as they need to have
30945         the same semantics as the other operators.
30946
30947         (Binary::ResolveOperator): ditto.
30948         (Invocation::ConversionExists): ditto.
30949         (UserImplicitCast::Resolve): ditto.
30950
30951 2001-09-26  Ravi Pratap  <ravi@ximian.com>
30952
30953         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
30954         operator, return after emitting body. Regression tests pass again !
30955
30956         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
30957         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
30958         (Invocation::OverloadResolve): Ditto.
30959         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
30960
30961         * everywhere : update calls to the above methods accordingly.
30962
30963 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
30964
30965         * assign.cs (Assign): Make it inherit from ExpressionStatement.
30966
30967         * expression.cs (ExpressionStatement): New base class used for
30968         expressions that can appear in statements, so that we can provide
30969         an alternate path to generate expression that do not leave a value
30970         on the stack.
30971
30972         (Expression::Emit, and all the derivatives): We no longer return
30973         whether a value is left on the stack or not.  Every expression
30974         after being emitted leaves a single value on the stack.
30975
30976         * codegen.cs (EmitContext::EmitStatementExpression): Use the
30977         facilties of ExpressionStatement if possible.
30978
30979         * cs-parser.jay: Update statement_expression.
30980
30981 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
30982
30983         * driver.cs: Change the wording of message
30984
30985 2001-09-25  Ravi Pratap  <ravi@ximian.com>
30986
30987         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
30988         the type of the expression to the return type of the method if
30989         we have an overloaded operator match ! The regression tests pass again !
30990         (Unary::ResolveOperator): Ditto.
30991
30992         * expression.cs (Invocation::ConversionExists): Correct the member lookup
30993         to find "op_Implicit", not "implicit" ;-)
30994         (UserImplicitCast): New class to take care of user-defined implicit conversions.
30995         (ConvertImplicit, ForceConversion): Take TypeContainer argument
30996
30997         * everywhere : Correct calls to the above accordingly.
30998
30999         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
31000         (ConvertImplicit): Do user-defined conversion if it exists.
31001
31002 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
31003
31004         * assign.cs: track location.
31005         (Resolve): Use implicit conversions on assignment.
31006
31007         * literal.cs: Oops.  Not good, Emit of short access values should
31008         pass (Bytes) or the wrong argument will be selected.
31009
31010         * expression.cs (Unary::Emit): Emit code for -expr.
31011
31012         (Unary::ResolveOperator): Handle `Substract' for non-constants
31013         (substract from zero from the non-constants).
31014         Deal with Doubles as well. 
31015
31016         (Expression::ConvertImplicitRequired): New routine that reports an
31017         error if no implicit conversion exists. 
31018
31019         (Invocation::OverloadResolve): Store the converted implicit
31020         expressions if we make them
31021
31022 2001-09-24  Ravi Pratap  <ravi@ximian.com>
31023
31024         * class.cs (ConstructorInitializer): Take a Location argument.
31025         (ConstructorBaseInitializer): Same here.
31026         (ConstructorThisInitializer): Same here.
31027
31028         * cs-parser.jay : Update all calls accordingly.
31029
31030         * expression.cs (Unary, Binary, New): Take location argument.
31031         Update accordingly everywhere.
31032
31033         * cs-parser.jay : Update all calls to the above to take a location
31034         argument.
31035
31036         * class.cs : Ditto.
31037
31038 2001-09-24  Ravi Pratap  <ravi@ximian.com>
31039
31040         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
31041         (Invocation::BetterConversion): Same here
31042         (Invocation::ConversionExists): Ditto.
31043
31044         (Invocation::ConversionExists): Implement.
31045
31046 2001-09-22  Ravi Pratap  <ravi@ximian.com>
31047
31048         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
31049         Also take an additional TypeContainer argument.
31050
31051         * All over : Pass in TypeContainer as argument to OverloadResolve.
31052
31053         * typemanager.cs (CSharpName): Update to check for the string type and return
31054         that too.
31055
31056         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
31057         a given method.
31058
31059 2001-09-21  Ravi Pratap  <ravi@ximian.com>
31060
31061         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
31062         (Invocation::BetterFunction): Implement.
31063         (Invocation::BetterConversion): Implement.
31064         (Invocation::ConversionExists): Skeleton, no implementation yet.
31065
31066         Okay, things work fine !
31067
31068 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
31069
31070         * typemanager.cs: declare and load enum_type, delegate_type and
31071         void_type. 
31072
31073         * expression.cs (Expression::Emit): Now emit returns a value that
31074         tells whether a value is left on the stack or not.  This strategy
31075         might be reveted tomorrow with a mechanism that would address
31076         multiple assignments.
31077         (Expression::report118): Utility routine to report mismatches on
31078         the ExprClass.
31079
31080         (Unary::Report23): Report impossible type/operator combination
31081         utility function.
31082
31083         (Unary::IsIncrementableNumber): Whether the type can be
31084         incremented or decremented with add.
31085         (Unary::ResolveOperator): Also allow enumerations to be bitwise
31086         complemented. 
31087         (Unary::ResolveOperator): Implement ++, !, ~,
31088
31089         (Invocation::Emit): Deal with new Emit convetion.
31090
31091         * All Expression derivatives: Updated their Emit method to return
31092         whether they leave values on the stack or not.
31093
31094         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
31095         stack for expressions that are statements. 
31096
31097 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
31098
31099         * expression.cs (LValue): New interface.  Must be implemented by
31100         LValue objects.
31101         (LocalVariableReference, ParameterReference, FieldExpr): Implement
31102         LValue interface.
31103
31104         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
31105         interface for generating code, simplifies the code.
31106
31107 2001-09-20  Ravi Pratap  <ravi@ximian.com>
31108
31109         * expression.cs (everywhere): Comment out return statements in ::Resolve
31110         methods to avoid the warnings.
31111
31112 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
31113
31114         * driver.cs (parse): Report error 2001 if we can not open the
31115         source file.
31116
31117         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
31118         not resolve it.
31119
31120         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
31121         object. 
31122
31123         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
31124         otherwise nested blocks end up with the same index.
31125
31126         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
31127
31128         * expression.cs:  Instead of having FIXMEs in the Resolve
31129         functions, throw exceptions so it is obvious that we are facing a
31130         bug. 
31131
31132         * cs-parser.jay (invocation_expression): Pass Location information.
31133
31134         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
31135         Use a basename for those routines because .NET does not like paths
31136         on them. 
31137
31138         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
31139         already defined.
31140
31141 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
31142
31143         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
31144         are loading the correct data types (throws an exception if not).
31145         (TypeManager::InitCoreTypes): Use CoreLookupType
31146
31147         * expression.cs (Unary::ResolveOperator): return the child
31148         expression for expressions which are just +expr.
31149         (Unary::ResolveOperator): Return negative literals for -LITERAL
31150         expressions (otherwise they are Unary {Literal}).
31151         (Invocation::Badness): Take into account `Implicit constant
31152         expression conversions'.
31153
31154         * literal.cs (LongLiteral): Implement long literal class.
31155         (IntLiteral): export the `Value' of the intliteral. 
31156
31157 2001-09-19  Ravi Pratap  <ravi@ximian.com>
31158
31159         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
31160
31161         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
31162         instead of 'Operator'
31163
31164         * expression.cs (Binary::ResolveOperator): Update accordingly.
31165         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
31166         and 'Minus'
31167
31168         * cs-parser.jay (unary_expression): Update to use the new names.
31169
31170         * gen-treedump.cs (GetUnary): Same here.
31171
31172         * expression.cs (Unary::Resolve): Implement.
31173         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
31174         operators are found instead of making noise ;-)
31175         (Unary::ResolveOperator): New method to do precisely the same thing which
31176         Binary::ResolveOperator does for Binary expressions.
31177         (Unary.method, .Arguments): Add.
31178         (Unary::OperName): Implement.   
31179         (Unary::ForceConversion): Copy and Paste !
31180
31181         * class.cs (Operator::Define): Fix a small bug for the case when we have 
31182         a unary operator.
31183
31184         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
31185         for the inbuilt operators. Only overloading works for now ;-)
31186
31187 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
31188
31189         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
31190         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
31191
31192         * expression.cs (This::Emit): Implement. 
31193         (This::Resolve): Implement.
31194         (TypeOf:Resolve): Implement.
31195         (Expression::ResolveSimpleName): Add an implicit this to instance
31196         field references. 
31197         (MemberAccess::Resolve): Deal with Parameters and Fields. 
31198         Bind instance variable to Field expressions.
31199         (FieldExpr::Instance): New field used to track the expression that
31200         represents the object instance.
31201         (FieldExpr::Resolve): Track potential errors from MemberLookup not
31202         binding 
31203         (FieldExpr::Emit): Implement.
31204
31205         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
31206         the last instruction contains a return opcode to avoid generating
31207         the last `ret' instruction (this generates correct code, and it is
31208         nice to pass the peverify output).
31209
31210         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
31211         initializer for static and instance variables.
31212         (Constructor::Emit): Allow initializer to be null in the case of
31213         static constructors.  Only emit initializer for instance
31214         constructors. 
31215
31216         (TypeContainer::FindMembers): Return a null array if there are no
31217         matches.
31218
31219         Also fix the code for the MemberTypes.Method branch, as it was not
31220         scanning that for operators (or tried to access null variables before).
31221
31222         * assign.cs (Assign::Emit): Handle instance and static fields. 
31223
31224         * TODO: Updated.
31225
31226         * driver.cs: Stop compilation if there are parse errors.
31227
31228         * cs-parser.jay (constructor_declaration): Provide default base
31229         initializer for non-static constructors.
31230         (constructor_declarator): Do not provide a default base
31231         initializers if none was specified.
31232         Catch the fact that constructors should not have parameters.
31233
31234         * class.cs: Do not emit parent class initializers for static
31235         constructors, that should be flagged as an error.
31236
31237 2001-09-18  Ravi Pratap  <ravi@ximian.com>
31238
31239         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
31240         Move back code into TypeContainer::Populate.
31241
31242 2001-09-18  Ravi Pratap  <ravi@ximian.com>
31243
31244         * class.cs (TypeContainer::AddConstructor): Fix the check to
31245         compare against Name, not Basename. 
31246         (Operator::OpType): Change Plus and Minus to Add and Subtract.
31247
31248         * cs-parser.jay : Update accordingly.
31249
31250         * class.cs (TypeContainer::FindMembers): For the case where we are searching
31251         for methods, don't forget to look into the operators too.
31252         (RegisterMethodBuilder): Helper method to take care of this for
31253         methods, constructors and operators.
31254         (Operator::Define): Completely revamp.
31255         (Operator.OperatorMethod, MethodName): New fields.
31256         (TypeContainer::Populate): Move the registering of builders into
31257         RegisterMethodBuilder.
31258         (Operator::Emit): Re-write.
31259
31260         * expression.cs (Binary::Emit): Comment out code path to emit method
31261         invocation stuff for the case when we have a user defined operator. I am
31262         just not able to get it right !
31263
31264 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
31265
31266         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
31267         argument. 
31268
31269         (Expression::MemberLookup): Provide a version that allows to
31270         specify the MemberTypes and BindingFlags. 
31271
31272         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
31273         so it was not fetching variable information from outer blocks.
31274
31275         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
31276         Beforefieldinit as it was buggy.
31277
31278         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
31279         that Ravi put here.  
31280
31281         * class.cs (Constructor::Emit): Only emit if block is not null.
31282         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
31283         deal with this by semantically definining it as if the user had
31284         done it.
31285
31286         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
31287         constructors as we now "emit" them at a higher level.
31288
31289         (TypeContainer::DefineDefaultConstructor): Used to define the
31290         default constructors if none was provided.
31291
31292         (ConstructorInitializer): Add methods Resolve and Emit. 
31293
31294         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
31295
31296 2001-09-17  Ravi Pratap  <ravi@ximian.com>
31297
31298         * class.cs (TypeContainer::EmitDefaultConstructor): Register
31299         the default constructor builder with our hashtable for methodbuilders
31300         to methodcores.
31301
31302         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
31303         and argument_count is 0 in which case we have a match.
31304         (Binary::ResolveOperator): More null checking and miscellaneous coding
31305         style cleanup.
31306
31307 2001-09-17  Ravi Pratap  <ravi@ximian.com>
31308
31309         * rootcontext.cs (IsNameSpace): Compare against null.
31310
31311         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
31312
31313         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
31314         and Unary::Operator.
31315
31316         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
31317         accordingly.
31318
31319         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
31320         we have overloaded operators.
31321         (Binary::ResolveOperator): Implement the part which does the operator overload
31322         resolution.
31323
31324         * class.cs (Operator::Emit): Implement.
31325         (TypeContainer::Emit): Emit the operators we have too.
31326
31327         * expression.cs (Binary::Emit): Update to emit the appropriate code for
31328         the case when we have a user-defined operator.
31329
31330 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
31331
31332         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
31333
31334 2001-09-16  Ravi Pratap  <ravi@ximian.com>
31335
31336         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
31337         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
31338         (Constructor::Emit): Implement.
31339         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
31340         if we have no work to do. 
31341         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
31342         Emit method.
31343
31344         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
31345         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
31346
31347         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
31348         of parent.parent.
31349
31350 2001-09-15  Ravi Pratap  <ravi@ximian.com>
31351
31352         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
31353         in the source.
31354         (Tree::RecordNamespace): Method to do what the name says ;-)
31355         (Tree::Namespaces): Property to get at the namespaces hashtable.
31356
31357         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
31358         keep track.
31359
31360         * rootcontext.cs (IsNamespace): Fixed it :-)
31361
31362 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
31363
31364         * class.cs (TypeContainer::FindMembers): Add support for
31365         constructors. 
31366         (MethodCore): New class that encapsulates both the shared aspects
31367         of a Constructor and a Method.  
31368         (Method, Constructor): Factored pieces into MethodCore.
31369
31370         * driver.cs: Added --fatal which makes errors throw exceptions.
31371         Load System assembly as well as part of the standard library.
31372
31373         * report.cs: Allow throwing exceptions on errors for debugging.
31374
31375         * modifiers.cs: Do not use `parent', instead use the real type
31376         container to evaluate permission settings.
31377
31378         * class.cs: Put Ravi's patch back in.  He is right, and we will
31379         have to cope with the
31380
31381 2001-09-14  Ravi Pratap  <ravi@ximian.com>
31382
31383         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
31384         FamORAssem, not FamANDAssem.
31385
31386 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
31387
31388         * driver.cs: Added --parse option that only parses its input files
31389         and terminates.
31390
31391         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
31392         incorrect.  IsTopLevel is not used to tell whether an object is
31393         root_types or not (that can be achieved by testing this ==
31394         root_types).  But to see if this is a top-level *class* (not
31395         necessarly our "toplevel" container). 
31396
31397 2001-09-14  Ravi Pratap  <ravi@ximian.com>
31398
31399         * enum.cs (Enum::Define): Modify to call the Lookup method on the
31400         parent instead of a direct call to GetType.
31401
31402 2001-09-14  Ravi Pratap  <ravi@ximian.com>
31403
31404         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
31405         Modifiers.TypeAttr. This should just be a call to that method.
31406
31407         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
31408         object so that we can determine if we are top-level or not.
31409
31410         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
31411         TypeContainer too.
31412
31413         * enum.cs (Enum::Define): Ditto.
31414
31415         * modifiers.cs (FieldAttr): Re-write.
31416
31417         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
31418         (TypeContainer::HaveStaticConstructor): New property to provide access
31419         to precisely that info.
31420
31421         * modifiers.cs (MethodAttr): Re-write.
31422         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
31423
31424         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
31425         of top-level types as claimed.
31426
31427 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
31428
31429         * expression.cs (MemberLookup): Fruitless attempt to lookup
31430         constructors.  Maybe I need to emit default constructors?  That
31431         might be it (currently .NET emits this for me automatically).
31432         (Invocation::OverloadResolve): Cope with Arguments == null.
31433         (Invocation::EmitArguments): new function, shared by the new
31434         constructor and us.
31435         (Invocation::Emit): Handle static and instance methods.  Emit
31436         proper call instruction for virtual or non-virtual invocations.
31437         (New::Emit): Implement.
31438         (New::Resolve): Implement.
31439         (MemberAccess:Resolve): Implement.
31440         (MethodGroupExpr::InstanceExpression): used conforming to the spec
31441         to track instances.
31442         (FieldExpr::Resolve): Set type.
31443
31444         * support.cs: Handle empty arguments.
31445                 
31446         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
31447         SimpleLookup): Auxiliary routines to help parse a qualifier
31448         identifier.  
31449
31450         Update qualifier_identifier rule.
31451
31452         * codegen.cs: Removed debugging messages.
31453
31454         * class.cs: Make this a global thing, this acts just as a "key" to
31455         objects that we might have around.
31456
31457         (Populate): Only initialize method_builders_to_methods once.
31458
31459         * expression.cs (PropertyExpr): Initialize type from the
31460         PropertyType. 
31461
31462         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
31463         Resolve pattern.  Attempt to implicitly convert value to boolean.
31464         Emit code.
31465
31466         * expression.cs: Set the type for the int32/int32 argument case.
31467         (Binary::ResolveOperator): Set the return type to boolean for
31468         comparission operators
31469
31470         * typemanager.cs: Remove debugging print code.
31471
31472         (Invocation::Resolve): resolve type.
31473
31474         * class.cs: Allocate a MemberInfo of the correct size, as the code
31475         elsewhere depends on the test to reflect the correct contents.
31476
31477         (Method::) Keep track of parameters, due to System.Reflection holes
31478
31479         (TypeContainer::Populate): Keep track of MethodBuilders to Method
31480         mapping here.
31481
31482         (TypeContainer::FindMembers): Use ArrayList and then copy an array
31483         of the exact size and return that.
31484
31485         (Class::LookupMethodByBuilder): New function that maps
31486         MethodBuilders to its methods.  Required to locate the information
31487         on methods because System.Reflection bit us again.
31488
31489         * support.cs: New file, contains an interface ParameterData and
31490         two implementations: ReflectionParameters and InternalParameters
31491         used to access Parameter information.  We will need to grow this
31492         as required.
31493
31494         * expression.cs (Invocation::GetParameterData): implement a cache
31495         and a wrapper around the ParameterData creation for methods. 
31496         (Invocation::OverloadResolve): Use new code.
31497
31498 2001-09-13  Ravi Pratap  <ravi@ximian.com>
31499
31500         * class.cs (TypeContainer::EmitField): Remove and move into 
31501         (Field::Define): here and modify accordingly.
31502         (Field.FieldBuilder): New member.
31503         (TypeContainer::Populate): Update accordingly.
31504         (TypeContainer::FindMembers): Implement.
31505
31506 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
31507
31508         * statement.cs: (VariableInfo::VariableType): New field to be
31509         initialized with the full type once it is resolved. 
31510
31511 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
31512
31513         * parameter.cs (GetParameterInfo): Use a type cache to compute
31514         things only once, and to reuse this information
31515
31516         * expression.cs (LocalVariableReference::Emit): Implement.
31517         (OpcodeCast::Emit): fix.
31518
31519         (ParameterReference::Resolve): Implement.
31520         (ParameterReference::Emit): Implement.
31521
31522         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
31523         that are expressions need to stay as Expressions.
31524
31525         * typemanager.cs (CSharpName): Returns the C# name of a type if
31526         possible. 
31527
31528         * expression.cs (Expression::ConvertImplicit): New function that
31529         implements implicit type conversions.
31530
31531         (Expression::ImplicitReferenceConversion): Implements implicit
31532         reference conversions.
31533
31534         (EmptyCast): New type for transparent casts.
31535
31536         (OpcodeCast): New type for casts of types that are performed with
31537         a sequence of bytecodes.
31538
31539         (BoxedCast): New type used for casting value types into reference
31540         types.  Emits a box opcode.
31541
31542         (Binary::DoNumericPromotions): Implements numeric promotions of
31543         and computation of the Binary::Type.
31544
31545         (Binary::EmitBranchable): Optimization.
31546
31547         (Binary::Emit): Implement code emission for expressions.
31548
31549         * typemanager.cs (TypeManager): Added two new core types: sbyte
31550         and byte.
31551
31552 2001-09-12  Ravi Pratap  <ravi@ximian.com>
31553
31554         * class.cs (TypeContainer::FindMembers): Method which does exactly
31555         what Type.FindMembers does, only we don't have to use reflection. No
31556         implementation yet.
31557
31558         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
31559         typecontainer objects as we need to get at them.
31560         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
31561
31562         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
31563         typecontainer object.
31564
31565         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
31566         of just a Report object.
31567
31568 2001-09-11  Ravi Pratap  <ravi@ximian.com>
31569
31570         * class.cs (Event::Define): Go back to using the prefixes "add_" and
31571         "remove_"
31572         (TypeContainer::Populate): Now define the delegates of the type too.
31573         (TypeContainer.Delegates): Property to access the list of delegates defined
31574         in the type.
31575
31576         * delegates.cs (Delegate::Define): Implement partially.
31577
31578         * modifiers.cs (TypeAttr): Handle more flags.
31579
31580 2001-09-11  Ravi Pratap  <ravi@ximian.com>
31581
31582         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
31583         and not <=
31584         (Operator::Define): Re-write logic to get types by using the LookupType method
31585         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
31586         (Indexer::Define): Ditto.
31587         (Event::Define): Ditto.
31588         (Property::Define): Ditto.
31589
31590 2001-09-10  Ravi Pratap  <ravi@ximian.com>
31591
31592         * class.cs (TypeContainer::Populate): Now define operators too. 
31593         (TypeContainer.Operators): New property to access the list of operators
31594         in a type.
31595         (Operator.OperatorMethodBuilder): New member to hold the method builder
31596         for the operator we are defining.
31597         (Operator::Define): Implement.
31598
31599 2001-09-10  Ravi Pratap  <ravi@ximian.com>
31600
31601         * class.cs (Event::Define): Make the prefixes of the accessor methods
31602         addOn_ and removeOn_ 
31603
31604         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
31605         of the location being passed in too. Ideally, this should go later since all
31606         error reporting should be done through the Report object.
31607
31608         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
31609         (Populate): Iterate thru the indexers we have and define them too.
31610         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
31611         for the get and set accessors.
31612         (Indexer::Define): Implement.
31613
31614 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
31615
31616         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
31617         my previous implementation, did not work.
31618
31619         * typemanager.cs: Add a couple of missing types (the longs).
31620
31621         * literal.cs: Use TypeManager.bool_type instead of getting it.
31622
31623         * expression.cs (EventExpr): New kind of expressions.
31624         (Expressio::ExprClassFromMemberInfo): finish
31625
31626 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
31627
31628         * assign.cs: Emit stores to static fields differently.
31629
31630 2001-09-08  Ravi Pratap  <ravi@ximian.com>
31631
31632         * Merge in changes and adjust code to tackle conflicts. Backed out my
31633         code in Assign::Resolve ;-) 
31634
31635 2001-09-08  Ravi Pratap  <ravi@ximian.com>
31636
31637         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
31638         instead Report.Error and also pass in the location.
31639         (CSharpParser::Lexer): New readonly property to return the reference
31640         to the Tokenizer object.
31641         (declare_local_variables): Use Report.Error with location instead of plain 
31642         old error.
31643         (CheckDef): Ditto.
31644
31645         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
31646         (Operator.CheckBinaryOperator): Ditto.
31647
31648         * cs-parser.jay (operator_declarator): Update accordingly.
31649
31650         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
31651         (CheckBinaryOperator): Same here.
31652
31653         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
31654         on the name without any prefixes of namespace names etc. This is because we
31655         already might have something already fully qualified like 
31656         'System.Console.WriteLine'
31657
31658         * assign.cs (Resolve): Begin implementation. Stuck ;-)
31659
31660 2001-09-07  Ravi Pratap  <ravi@ximian.com>
31661
31662         * cs-tokenizer.cs (location): Return a string which also contains
31663         the file name.
31664
31665         * expression.cs (ElementAccess): New class for expressions of the
31666         type 'element access.'
31667         (BaseAccess): New class for expressions of the type 'base access.'
31668         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
31669         respectively.
31670
31671         * cs-parser.jay (element_access): Implement action.
31672         (base_access): Implement actions.
31673         (checked_expression, unchecked_expression): Implement.
31674
31675         * cs-parser.jay (local_variable_type): Correct and implement.
31676         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
31677
31678         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
31679
31680         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
31681         name and the specifiers.
31682
31683         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
31684
31685         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
31686         making them all public ;-)
31687
31688         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
31689         class anyways.
31690
31691 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
31692
31693         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
31694         PropertyExprs.
31695         (FieldExpr, PropertyExprs): New resolved expressions.
31696         (SimpleName::MemberStaticCheck): Perform static checks for access
31697         to non-static fields on static methods. Maybe this should be
31698         generalized for MemberAccesses. 
31699         (SimpleName::ResolveSimpleName): More work on simple name
31700         resolution. 
31701
31702         * cs-parser.jay (primary_expression/qualified_identifier): track
31703         the parameter index.
31704
31705         * codegen.cs (CodeGen::Save): Catch save exception, report error.
31706         (EmitContext::EmitBoolExpression): Chain to expression generation
31707         instead of temporary hack.
31708         (::EmitStatementExpression): Put generic expression code generation.
31709
31710         * assign.cs (Assign::Emit): Implement variable assignments to
31711         local variables, parameters and fields.
31712
31713 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
31714
31715         * statement.cs (Block::GetVariableInfo): New method, returns the
31716         VariableInfo for a variable name in a block.
31717         (Block::GetVariableType): Implement in terms of GetVariableInfo
31718
31719         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
31720         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
31721
31722 2001-09-06  Ravi Pratap  <ravi@ximian.com>
31723
31724         * cs-parser.jay (operator_declaration): Continue on my quest : update
31725         to take attributes argument.
31726         (event_declaration): Ditto.
31727         (enum_declaration): Ditto.
31728         (indexer_declaration): Ditto.
31729
31730         * class.cs (Operator::Operator): Update constructor accordingly.
31731         (Event::Event): Ditto.
31732
31733         * delegate.cs (Delegate::Delegate): Same here.
31734
31735         * enum.cs (Enum::Enum): Same here.
31736
31737 2001-09-05  Ravi Pratap  <ravi@ximian.com>
31738
31739         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
31740
31741         * ../tests/cs0658.cs : New file to demonstrate error 0658.
31742
31743         * attribute.cs (Attributes): New class to encapsulate all attributes which were
31744         being passed around as an arraylist.
31745         (Attributes::AddAttribute): Method to add attribute sections.
31746
31747         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
31748         (struct_declaration): Update accordingly.
31749         (constant_declaration): Update.
31750         (field_declaration): Update.
31751         (method_header): Update.
31752         (fixed_parameter): Update.
31753         (parameter_array): Ditto.
31754         (property_declaration): Ditto.
31755         (destructor_declaration): Ditto.
31756
31757         * class.cs (Struct::Struct): Update constructors accordingly.
31758         (Class::Class): Ditto.
31759         (Field::Field): Ditto.
31760         (Method::Method): Ditto.
31761         (Property::Property): Ditto.
31762         (TypeContainer::OptAttribute): update property's return type.
31763
31764         * interface.cs (Interface.opt_attributes): New member.
31765         (Interface::Interface): Update to take the extra Attributes argument.
31766
31767         * parameter.cs (Parameter::Parameter): Ditto.
31768
31769         * constant.cs (Constant::Constant): Ditto.
31770
31771         * interface.cs (InterfaceMemberBase): New OptAttributes field.
31772         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
31773         the attributes as a parameter.
31774         (InterfaceProperty): Update constructor call.
31775         (InterfaceEvent): Ditto.
31776         (InterfaceMethod): Ditto.
31777         (InterfaceIndexer): Ditto.
31778
31779         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
31780         pass the attributes too.
31781         (interface_event_declaration): Ditto.
31782         (interface_property_declaration): Ditto.
31783         (interface_method_declaration): Ditto.
31784         (interface_declaration): Ditto.
31785
31786 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
31787
31788         * class.cs (Method::Define): Track the "static Main" definition to
31789         create an entry point. 
31790
31791         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
31792         EntryPoint if we find it. 
31793
31794         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
31795         (EmitContext::ig): Make this variable public.
31796
31797         * driver.cs: Make the default output file be the first file name
31798         with the .exe extension.  
31799
31800         Detect empty compilations
31801
31802         Handle various kinds of output targets.  Handle --target and
31803         rename -t to --dumper.
31804
31805         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
31806         methods inherited from Expression return now an Expression.  This
31807         will is used during the tree rewriting as we resolve them during
31808         semantic analysis.
31809
31810         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
31811         the spec.  Missing entirely is the information about
31812         accessability of elements of it.
31813
31814         (Expression::ExprClassFromMemberInfo): New constructor for
31815         Expressions that creates a fully initialized Expression based on
31816         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
31817         a Type.
31818
31819         (Invocation::Resolve): Begin implementing resolution of invocations.
31820
31821         * literal.cs (StringLiteral):  Implement Emit.
31822
31823 2001-09-05  Ravi Pratap  <ravi@ximian.com>
31824
31825         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
31826         member.
31827
31828 2001-09-04  Ravi Pratap  <ravi@ximian.com>
31829
31830         * cs-parser.jay (attribute_arguments): Implement actions.
31831         (attribute): Fix bug in production. Implement action.
31832         (attribute_list): Implement.
31833         (attribute_target): Implement.
31834         (attribute_target_specifier, opt_target_specifier): Implement
31835         (CheckAttributeTarget): New method to check if the attribute target
31836         is valid.
31837         (attribute_section): Implement.
31838         (opt_attributes): Implement.
31839
31840         * attribute.cs : New file to handle attributes.
31841         (Attribute): Class to hold attribute info.
31842
31843         * cs-parser.jay (opt_attribute_target_specifier): Remove production
31844         (attribute_section): Modify production to use 2 different rules to 
31845         achieve the same thing. 1 s/r conflict down !
31846         Clean out commented, useless, non-reducing dimension_separator rules.
31847
31848         * class.cs (TypeContainer.attributes): New member to hold list
31849         of attributes for a type.
31850         (Struct::Struct): Modify to take one more argument, the attribute list.
31851         (Class::Class): Ditto.
31852         (Field::Field): Ditto.
31853         (Method::Method): Ditto.
31854         (Property::Property): Ditto.
31855
31856         * cs-parser.jay (struct_declaration): Update constructor call to
31857         pass in the attributes too.
31858         (class_declaration): Ditto.
31859         (constant_declaration): Ditto.
31860         (field_declaration): Ditto.
31861         (method_header): Ditto.
31862         (fixed_parameter): Ditto.
31863         (parameter_array): Ditto.
31864         (property_declaration): Ditto.
31865
31866         * constant.cs (Constant::Constant): Update constructor similarly.
31867         Use System.Collections.
31868
31869         * parameter.cs (Parameter::Parameter): Update as above.
31870
31871 2001-09-02  Ravi Pratap  <ravi@ximian.com>
31872
31873         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
31874         (TypeContainer.delegates): New member to hold list of delegates.
31875
31876         * cs-parser.jay (delegate_declaration): Implement the action correctly 
31877         this time as I seem to be on crack ;-)
31878
31879 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
31880
31881         * rootcontext.cs (RootContext::IsNamespace): new function, used to
31882         tell whether an identifier represents a namespace.
31883
31884         * expression.cs (NamespaceExpr): A namespace expression, used only
31885         temporarly during expression resolution.
31886         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
31887         utility functions to resolve names on expressions.
31888
31889 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
31890
31891         * codegen.cs: Add hook for StatementExpressions. 
31892
31893         * class.cs: Fix inverted test for static flag in methods.
31894
31895 2001-09-02  Ravi Pratap  <ravi@ximian.com>
31896
31897         * class.cs (Operator::CheckUnaryOperator): Correct error number used
31898         to make it coincide with MS' number.
31899         (Operator::CheckBinaryOperator): Ditto.
31900
31901         * ../errors/errors.txt : Remove error numbers added earlier.
31902
31903         * ../errors/cs1019.cs : Test case for error # 1019
31904
31905         * ../errros/cs1020.cs : Test case for error # 1020
31906
31907         * cs-parser.jay : Clean out commented cruft.
31908         (dimension_separators, dimension_separator): Comment out. Ostensibly not
31909         used anywhere - non-reducing rule.
31910         (namespace_declarations): Non-reducing rule - comment out.
31911
31912         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
31913         with TypeContainer::AddEnum.
31914
31915         * delegate.cs : New file for delegate handling classes.
31916         (Delegate): Class for declaring delegates.
31917
31918         * makefile : Update.
31919
31920         * cs-parser.jay (delegate_declaration): Implement.
31921
31922 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
31923
31924         * class.cs (Event::Define): Implement.
31925         (Event.EventBuilder): New member.
31926
31927         * class.cs (TypeContainer::Populate): Update to define all enums and events
31928         we have.
31929         (Events): New property for the events arraylist we hold. Shouldn't we move to using
31930         readonly fields for all these cases ?
31931
31932 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
31933
31934         * class.cs (Property): Revamp to use the convention of making fields readonly.
31935         Accordingly modify code elsewhere.
31936
31937         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
31938         the Define method of the Property class.
31939
31940         * class.cs : Clean up applied patch and update references to variables etc. Fix 
31941         trivial bug.
31942         (TypeContainer::Populate): Update to define all the properties we have. Also
31943         define all enumerations.
31944
31945         * enum.cs (Define): Implement.
31946
31947 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
31948
31949         * cs-parser.jay (overloadable_operator): The semantic value is an
31950         enum of the Operator class.
31951         (operator_declarator): Implement actions.
31952         (operator_declaration): Implement.
31953
31954         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
31955         validity of definitions.
31956         (Operator::CheckBinaryOperator): Static method to check for binary operators
31957         (TypeContainer::AddOperator): New method to add an operator to a type.
31958
31959         * cs-parser.jay (indexer_declaration): Added line to actually call the
31960         AddIndexer method so it gets added ;-)
31961
31962         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
31963         already taken care of by the MS compiler ?  
31964
31965 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
31966
31967         * class.cs (Operator): New class for operator declarations.
31968         (Operator::OpType): Enum for the various operators.
31969
31970 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
31971
31972         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
31973         ostensibly handle this in semantic analysis.
31974
31975         * cs-parser.jay (general_catch_clause): Comment out
31976         (specific_catch_clauses, specific_catch_clause): Ditto.
31977         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
31978         (catch_args, opt_catch_args): New productions.
31979         (catch_clause): Rewrite to use the new productions above
31980         (catch_clauses): Modify accordingly.
31981         (opt_catch_clauses): New production to use in try_statement
31982         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
31983         and re-write the code in the actions to extract the specific and
31984         general catch clauses by being a little smart ;-)
31985
31986         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
31987         Hooray, try and catch statements parse fine !
31988
31989 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
31990
31991         * statement.cs (Block::GetVariableType): Fix logic to extract the type
31992         string from the hashtable of variables.
31993
31994         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
31995         I end up making that mistake ;-)
31996         (catch_clauses): Fixed gross error which made Key and Value of the 
31997         DictionaryEntry the same : $1 !!
31998
31999 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
32000
32001         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
32002
32003         * cs-parser.jay (event_declaration): Correct to remove the semicolon
32004         when the add and remove accessors are specified. 
32005
32006 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
32007
32008         * cs-parser.jay (IndexerDeclaration): New helper class to hold
32009         information about indexer_declarator.
32010         (indexer_declarator): Implement actions.
32011         (parsing_indexer): New local boolean used to keep track of whether
32012         we are parsing indexers or properties. This is necessary because 
32013         implicit_parameters come into picture even for the get accessor in the 
32014         case of an indexer.
32015         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
32016
32017         * class.cs (Indexer): New class for indexer declarations.
32018         (TypeContainer::AddIndexer): New method to add an indexer to a type.
32019         (TypeContainer::indexers): New member to hold list of indexers for the
32020         type.
32021
32022 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
32023
32024         * cs-parser.jay (add_accessor_declaration): Implement action.
32025         (remove_accessor_declaration): Implement action.
32026         (event_accessors_declaration): Implement
32027         (variable_declarators): swap statements for first rule - trivial.
32028
32029         * class.cs (Event): New class to hold information about event
32030         declarations.
32031         (TypeContainer::AddEvent): New method to add an event to a type
32032         (TypeContainer::events): New member to hold list of events.
32033
32034         * cs-parser.jay (event_declaration): Implement actions.
32035
32036 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
32037
32038         * cs-parser.jay (dim_separators): Implement. Make it a string
32039         concatenating all the commas together, just as they appear.
32040         (opt_dim_separators): Modify accordingly
32041         (rank_specifiers): Update accordingly. Basically do the same
32042         thing - instead, collect the brackets here.
32043         (opt_rank_sepcifiers): Modify accordingly.
32044         (array_type): Modify to actually return the complete type string
32045         instead of ignoring the rank_specifiers.
32046         (expression_list): Implement to collect the expressions
32047         (variable_initializer): Implement. We make it a list of expressions
32048         essentially so that we can handle the array_initializer case neatly too.
32049         (variable_initializer_list): Implement.
32050         (array_initializer): Make it a list of variable_initializers
32051         (opt_array_initializer): Modify accordingly.
32052
32053         * expression.cs (New::NType): Add enumeration to help us
32054         keep track of whether we have an object/delegate creation
32055         or an array creation.
32056         (New:NewType, New::Rank, New::Indices, New::Initializers): New
32057         members to hold data about array creation.
32058         (New:New): Modify to update NewType
32059         (New:New): New Overloaded contructor for the array creation
32060         case.
32061
32062         * cs-parser.jay (array_creation_expression): Implement to call
32063         the overloaded New constructor.
32064
32065 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
32066
32067         * class.cs (TypeContainer::Constructors): Return member
32068         constructors instead of returning null.
32069
32070 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
32071
32072         * typemanager.cs (InitCoreTypes): Initialize the various core
32073         types after we have populated the type manager with the user
32074         defined types (this distinction will be important later while
32075         compiling corlib.dll)
32076
32077         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
32078         on Expression Classification.  Now all expressions have a method
32079         `Resolve' and a method `Emit'.
32080
32081         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
32082         generation from working.     Also add some temporary debugging
32083         code. 
32084
32085 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
32086
32087         * codegen.cs: Lots of code generation pieces.  This is only the
32088         beginning, will continue tomorrow with more touches of polish.  We
32089         handle the fundamentals of if, while, do, for, return.  Others are
32090         trickier and I need to start working on invocations soon.
32091
32092         * gen-treedump.cs: Bug fix, use s.Increment here instead of
32093         s.InitStatement. 
32094
32095         * codegen.cs (EmitContext): New struct, used during code
32096         emission to keep a context.   Most of the code generation will be
32097         here. 
32098
32099         * cs-parser.jay: Add embedded blocks to the list of statements of
32100         this block.  So code generation proceeds in a top down fashion.
32101
32102 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
32103
32104         * statement.cs: Add support for multiple child blocks.
32105
32106 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
32107
32108         * codegen.cs (EmitCode): New function, will emit the code for a
32109         Block of code given a TypeContainer and its ILGenerator. 
32110
32111         * statement.cs (Block): Standard public readonly optimization.
32112         (Block::Block constructors): Link children. 
32113         (Block::Child): Child Linker.
32114         (Block::EmitVariables): Emits IL variable declarations.
32115
32116         * class.cs: Drop support for MethodGroups here, delay until
32117         Semantic Analysis.
32118         (Method::): Applied the same simplification that I did before, and
32119         move from Properties to public readonly fields.
32120         (Method::ParameterTypes): Returns the parameter types for the
32121         function, and implements a cache that will be useful later when I
32122         do error checking and the semantic analysis on the methods is
32123         performed.
32124         (Constructor::GetCallingConvention): Renamed from CallingConvetion
32125         and made a method, optional argument tells whether this is a class
32126         or a structure to apply the `has-this' bit.
32127         (Method::GetCallingConvention): Implement, returns the calling
32128         convention. 
32129         (Method::Define): Defines the type, a second pass is performed
32130         later to populate the methods.
32131
32132         (Constructor::ParameterTypes): implement a cache similar to the
32133         one on Method::ParameterTypes, useful later when we do semantic
32134         analysis. 
32135
32136         (TypeContainer::EmitMethod):  New method.  Emits methods.
32137
32138         * expression.cs: Removed MethodGroup class from here.
32139
32140         * parameter.cs (Parameters::GetCallingConvention): new method.
32141
32142 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
32143
32144         * class.cs (TypeContainer::Populate): Drop RootContext from the
32145         argument. 
32146
32147         (Constructor::CallingConvention): Returns the calling convention.
32148         (Constructor::ParameterTypes): Returns the constructor parameter
32149         types. 
32150
32151         (TypeContainer::AddConstructor): Keep track of default constructor
32152         and the default static constructor.
32153
32154         (Constructor::) Another class that starts using `public readonly'
32155         instead of properties. 
32156
32157         (Constructor::IsDefault): Whether this is a default constructor. 
32158
32159         (Field::) use readonly public fields instead of properties also.
32160
32161         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
32162         track of static constructors;  If none is used, turn on
32163         BeforeFieldInit in the TypeAttributes. 
32164
32165         * cs-parser.jay (opt_argument_list): now the return can be null
32166         for the cases where there are no arguments. 
32167
32168         (constructor_declarator): If there is no implicit `base' or
32169         `this', then invoke the default parent constructor. 
32170
32171         * modifiers.cs (MethodAttr): New static function maps a set of
32172         modifiers flags into a MethodAttributes enum
32173         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
32174         MethodAttr, TypeAttr to represent the various mappings where the
32175         modifiers are used.
32176         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
32177
32178 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
32179
32180         * parameter.cs (GetParameterInfo): Fix bug where there would be no
32181         method arguments.
32182
32183         * interface.cs (PopulateIndexer): Implemented the code generator
32184         for interface indexers.
32185
32186 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
32187
32188         * interface.cs (InterfaceMemberBase): Now we track the new status
32189         here.  
32190
32191         (PopulateProperty): Implement property population.  Woohoo!  Got
32192         Methods and Properties going today. 
32193
32194         Removed all the properties for interfaces, and replaced them with
32195         `public readonly' fields. 
32196
32197 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
32198
32199         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
32200         initialize their hashtables/arraylists only when they are needed
32201         instead of doing this always.
32202
32203         * parameter.cs: Handle refs and out parameters.
32204
32205         * cs-parser.jay: Use an ArrayList to construct the arguments
32206         instead of the ParameterCollection, and then cast that to a
32207         Parameter[] array.
32208
32209         * parameter.cs: Drop the use of ParameterCollection and use
32210         instead arrays of Parameters.
32211
32212         (GetParameterInfo): Use the Type, not the Name when resolving
32213         types. 
32214
32215 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
32216
32217         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
32218         and instead use public readonly fields.
32219
32220         * class.cs: Put back walking code for type containers.
32221
32222 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
32223
32224         * class.cs (MakeConstant): Code to define constants.
32225
32226         * rootcontext.cs (LookupType): New function.  Used to locate types 
32227
32228
32229 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
32230
32231         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
32232         this System.Reflection code is.  Kudos to Microsoft
32233
32234         * typemanager.cs: Implement a type cache and avoid loading all
32235         types at boot time.  Wrap in LookupType the internals.  This made
32236         the compiler so much faster.  Wow.  I rule!
32237
32238         * driver.cs: Make sure we always load mscorlib first (for
32239         debugging purposes, nothing really important).
32240
32241         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
32242         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
32243
32244         * rootcontext.cs: Lookup types on their namespace;  Lookup types
32245         on namespaces that have been imported using the `using' keyword.
32246
32247         * class.cs (TypeContainer::TypeAttr): Virtualize.
32248         (Class::TypeAttr): Return attributes suitable for this bad boy.
32249         (Struct::TypeAttr): ditto.
32250         Handle nested classes.
32251         (TypeContainer::) Remove all the type visiting code, it is now
32252         replaced with the rootcontext.cs code
32253
32254         * rootcontext.cs (GetClassBases): Added support for structs. 
32255
32256 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
32257
32258         * interface.cs, statement.cs, class.cs, parameter.cs,
32259         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
32260         Drop use of TypeRefs, and use strings instead.
32261
32262 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
32263
32264         * rootcontext.cs: 
32265
32266         * class.cs (Struct::Struct): set the SEALED flags after
32267         checking the modifiers.
32268         (TypeContainer::TypeAttr): new property, returns the
32269         TypeAttributes for a class.  
32270
32271         * cs-parser.jay (type_list): Oops, list production was creating a
32272         new list of base types.
32273
32274         * rootcontext.cs (StdLib): New property.
32275         (GetInterfaceTypeByName): returns an interface by type name, and
32276         encapsulates error handling here.
32277         (GetInterfaces): simplified.
32278         (ResolveTree): Encapsulated all the tree resolution here.
32279         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
32280         types. 
32281
32282         * driver.cs: Add support for --nostdlib, to avoid loading the
32283         default assemblies.
32284         (Main): Do not put tree resolution here. 
32285
32286         * rootcontext.cs: Beginning of the class resolution.
32287
32288 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
32289
32290         * rootcontext.cs: Provide better error reporting. 
32291
32292         * cs-parser.jay (interface_base): set our $$ to be interfaces.
32293
32294         * rootcontext.cs (CreateInterface): Handle the case where there
32295         are no parent interfaces.
32296
32297         (CloseTypes): Routine to flush types at the end.
32298         (CreateInterface): Track types.
32299         (GetInterfaces): Returns an array of Types from the list of
32300         defined interfaces.
32301
32302         * typemanager.c (AddUserType): Mechanism to track user types (puts
32303         the type on the global type hash, and allows us to close it at the
32304         end). 
32305
32306 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
32307
32308         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
32309         RecordInterface instead.
32310
32311         * cs-parser.jay: Updated to reflect changes above.
32312
32313         * decl.cs (Definition): Keep track of the TypeBuilder type that
32314         represents this type here.  Not sure we will use it in the long
32315         run, but wont hurt for now.
32316
32317         * driver.cs: Smaller changes to accomodate the new code.
32318
32319         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
32320         when done. 
32321
32322         * rootcontext.cs (CreateInterface):  New method, used to create
32323         the System.TypeBuilder type for interfaces.
32324         (ResolveInterfaces): new entry point to resolve the interface
32325         hierarchy. 
32326         (CodeGen): Property, used to keep track of the code generator.
32327
32328 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
32329
32330         * cs-parser.jay: Add a second production for delegate_declaration
32331         with `VOID'.
32332
32333         (enum_body): Put an opt_comma here instead of putting it on
32334         enum_body or enum_member_declarations so we can handle trailing
32335         commas on enumeration members.  Gets rid of a shift/reduce.
32336
32337         (type_list): Need a COMMA in the middle.
32338
32339         (indexer_declaration): Tell tokenizer to recognize get/set
32340
32341         * Remove old targets.
32342
32343         * Re-add the parser target.
32344
32345 2001-07-13  Simon Cozens <simon@simon-cozens.org>
32346
32347         * cs-parser.jay: Add precendence rules for a number of operators
32348         ot reduce the number of shift/reduce conflicts in the grammar.
32349
32350 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
32351
32352         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
32353         and put it here.
32354
32355         Get rid of old crufty code.
32356
32357         * rootcontext.cs: Use this to keep track of the parsed
32358         representation and the defined types available to the program. 
32359
32360         * gen-treedump.cs: adjust for new convention.
32361
32362         * type.cs: Split out the type manager, and the assembly builder
32363         from here. 
32364
32365         * typemanager.cs: the type manager will live here now.
32366
32367         * cil-codegen.cs: And the code generator here. 
32368
32369 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
32370
32371         * makefile: Fixed up for easy making.
32372
32373 2001-07-13  Simon Cozens <simon@simon-cozens.org>
32374
32375         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
32376         the 
32377
32378         (unary_expression): Expand pre_increment_expression and
32379         post_decrement_expression to reduce a shift/reduce.
32380
32381 2001-07-11  Simon Cozens
32382
32383         * cs-tokenizer.cs: Hex numbers should begin with a 0.
32384
32385         Improve allow_keyword_as_indent name.
32386
32387 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
32388
32389         * Adjustments for Beta2. 
32390
32391 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
32392
32393         * decl.cs: Added `Define' abstract method.
32394         (InTransit): new property, used to catch recursive definitions. 
32395
32396         * interface.cs: Implement `Define'. 
32397
32398         * modifiers.cs: Map Modifiers.constants to
32399         System.Reflection.TypeAttribute flags.
32400
32401         * class.cs: Keep track of types and user-defined types.
32402         (BuilderInit): New method for creating an assembly
32403         (ResolveType): New function to launch the resolution process, only
32404         used by interfaces for now.
32405
32406         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
32407         that are inserted into the name space. 
32408
32409 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
32410
32411         * ARGH.  I have screwed up my tree so many times due to the use of
32412         rsync rather than using CVS.  Going to fix this at once. 
32413
32414         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
32415         load types.
32416
32417 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
32418
32419         * Experiment successful: Use System.Type rather that our own
32420         version of Type.  
32421
32422 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
32423
32424         * cs-parser.jay: Removed nsAliases from here.
32425
32426         Use new namespaces, handle `using XXX;' 
32427
32428         * namespace.cs: Reimplemented namespace handling, use a recursive
32429         definition of the class.  Now we can keep track of using clauses
32430         and catch invalid using clauses.
32431
32432 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
32433
32434         * gen-treedump.cs: Adapted for all the renaming.
32435
32436         * expression.cs (Expression): this class now has a Type property
32437         which returns an expression Type.
32438
32439         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
32440         `Type', as this has a different meaning now in the base
32441
32442 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
32443
32444         * interface.cs, class.cs: Removed from all the sources the
32445         references to signature computation, as we can not do method
32446         signature computation during the parsing time, as we are not
32447         trying to solve at that point distinguishing:
32448
32449         class X {
32450                 void a (Blah x) {}
32451                 void a (NS.Blah x) {}
32452         }
32453
32454         Which depending on the context might be valid or not, as we do not
32455         know if Blah is the same thing as NS.Blah at that point.
32456
32457         * Redid everything so the code uses TypeRefs now instead of
32458         Types.  TypeRefs are just temporary type placeholders, that need
32459         to be resolved.  They initially have a pointer to a string and the
32460         current scope in which they are used.  This is used later by the
32461         compiler to resolve the reference to an actual Type. 
32462
32463         * DeclSpace is no longer a CIR.Type, and neither are
32464         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
32465         are all DeclSpaces, but no Types. 
32466
32467         * type.cs (TypeRefManager): This implements the TypeRef manager,
32468         which keeps track of all the types that need to be resolved after
32469         the parsing has finished. 
32470
32471 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
32472
32473         * ARGH.  We are going to have to store `foreach' as a class rather
32474         than resolving it, as we need to verify error 1579 after name
32475         resolution.   *OR* we could keep a flag that says `This request to
32476         IEnumerator comes from a foreach statement' which we can then use
32477         to generate the error.
32478
32479 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
32480
32481         * class.cs (TypeContainer.AddMethod): we now add methods to the
32482         MethodGroup instead of the method hashtable.  
32483
32484         * expression.cs: Add MethodGroup abstraction, which gets us one
32485         step closer to the specification in the way we handle method
32486         declarations.  
32487
32488         * cs-parser.jay (primary_expression): qualified_identifier now
32489         tried to match up an identifier to a local variable reference or
32490         to a parameter reference.
32491
32492         current_local_parameters is now a parser global variable that
32493         points to the current parameters for the block, used during name
32494         lookup.
32495
32496         (property_declaration): Now creates an implicit `value' argument to
32497         the set accessor.
32498
32499 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
32500
32501         * parameter.cs: Do not use `param' arguments as part of the
32502         signature, per the spec.
32503
32504 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
32505
32506         * decl.cs: Base class for classes, structs and interfaces.  This
32507         is the "Declaration Space" 
32508
32509         * cs-parser.jay: Use CheckDef for checking declaration errors
32510         instead of having one on each function.
32511
32512         * class.cs: Factor out some code for handling error handling in
32513         accordance to the "Declarations" section in the "Basic Concepts"
32514         chapter in the ECMA C# spec.
32515
32516         * interface.cs: Make all interface member classes derive from
32517         InterfaceMemberBase.
32518
32519 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
32520
32521         * Many things: all interfaces are parsed and generated in
32522         gen-treedump.  Support for member variables, constructors,
32523         destructors, properties, constants is there.
32524
32525         Beginning of the IL backend, but very little done, just there for
32526         testing purposes. 
32527
32528 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
32529
32530         * cs-parser.jay: Fix labeled statement.
32531
32532         * cs-tokenizer.cs (escape): Escape " and ' always.
32533         ref_line, ref_name: keep track of the line/filename as instructed
32534         by #line by the compiler.
32535         Parse #line.
32536
32537 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
32538
32539         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
32540         to match the values in System.CodeDOM.
32541
32542         Divid renamed to Divide.
32543
32544         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
32545         statements. 
32546         (Statements.set): remove.
32547
32548         * System.CodeDOM/CodeCatchClause.cs: always have a valid
32549         statements. 
32550
32551         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
32552         falseStatements always have valid values. 
32553
32554         * cs-parser.jay: Use System.CodeDOM now.
32555