merge 99762:100015
[mono.git] / mcs / mcs / ChangeLog
1 2008-04-06  Raja R Harinath  <harinath@hurrynot.org>
2
3         * iterators.cs (Iterator.EmitMoveNext): Remove try/fault wrapper.
4         Since $PC is always -1 inside the body of MoveNext, the fault
5         handler is a no-op.
6         * flowanalysis.cs (FlowBranchingException.EmitFinally): Kill.
7         * statement.cs (ExceptionStatement.emit_finally): Likewise.
8         (ExceptionStatement.ResolveFinally): Drop 'branching' argument.
9
10         The denouement!  Fix #324708
11         * iterators.cs (Iterator.EmitMoveNext): Reset $PC to -1 on entry.
12         (Iterator.EmitYieldBreak): We no longer need to reset $PC.
13         * statement.cs (ExceptionStatement.DoEmit): Actually emit the
14         'finally' inside the finally clause.
15
16         * statement.cs (ExceptionStatement.DoEmit): Emit try/finally block
17         inside an iterator.  Don't emit the body of the 'finally' inside
18         the finally clause yet.
19
20         Use the ResumableStatement infrastructure for MoveNext ()
21         * iterators.cs (Iterator.EmitMoveNext_NoResumePoints): New.
22         (Iterator.EmitMoveNext): Use 'resume_points'.  Get rid of
23         'old_resume_points'.  Move dispatcher upfront.
24         (Iterator.MarkYield): Mark the 'resume_point' of a Yield.
25         * statement.cs (ExceptionStatement.DoEmit): Emit a dispatcher if
26         in an enumerator.  This encodes the main fix in this patch series
27         -- we can only jump into the first instruction of a try from the
28         outside, but we want to emit try/finally regions in iterators and
29         resume in the middle of them.
30
31 2008-04-05  Raja R Harinath  <harinath@hurrynot.org>
32
33         * statement.cs (ExceptionStatement.ResolveFinally): Move setting
34         of NeedReturnLabel here.
35
36         Introduce a common point for emitting try/finally to IL
37         * statement.cs (ExceptionStatement.DoEmit): New.  Combines all the
38         features of the various subclasses, which are now driven by ...
39         (ExceptionStatement.EmitPreTryBody): ... this and ...
40         (ExceptionStatement.EmitTryBody): ... this and the original
41         EmitFinallyBody.
42         (TryFinally, Lock, Using, UsingTemporary, DisposableWrapper):
43         Remove DoEmit and update to follow above protocol.
44
45         * statement.cs (ExceptionStatement.EmitForDispose): If all labels
46         of the dispatcher are the same, skip emitting the 'switch'.
47         * iterator.cs (Iterator.EmitDispose): Update to changes.
48
49         Clean up handling of 'using' statement
50         * statement.cs (UsingTemporary): New.  Carved out of ...
51         (Using): ... this.  Simplify drastically.  Handle exactly
52         one variable.
53         * cs-parser.jay (using_statement): Split.  Create UsingTemporary
54         or Using as appropriate.  If there are multiple variable declared,
55         create nested Using statements.
56         (resource_acquisition): Kill.
57
58         * statement.cs (ExceptionStatement.EmitForDispose): Use
59         EmitFinallyBody, not EmitFinally.
60
61         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Remove.
62         * iterator.cs: Update to changes.
63
64         Start using the ResumableStatement infrastructure
65         * statement.cs (ResumeableStatement.PrepareForDispose): New.
66         (ResumableStatement.EmitForDispose): New.
67         (ExceptionStatement): Override them.
68         * iterators.cs (Iterator.EmitDispose): Use PrepareForDispose and
69         EmitForDispose to create the body of the Dispose method.  Don't
70         use OldResumePoint.
71
72         * iterator.cs (Iterator.AddResumePoint): Move here from ...
73         * statement.cs (Toplevel.AddResumePoint): ... here.
74         (Toplevel.MoveNextStatement.Resolve): Create FlowBranchingIterator.
75         * flowanalysis.cs (FlowBranchingIterator): New.
76         * codegen.cs (EmitContext): Update to changes.
77
78         * iterators.cs (Iterator.OldResumePoint): Rename from ResumePoint.
79         (Iterator.old_resume_points): Rename from 'resume_points'.
80         (Iterator.MoveNextStatement): Remove unused class.
81
82         New infrastructure for try/finally in iterators (still unused)
83         * flowanalysis.cs (FlowBranching.AddResumePoint): New.
84         (FlowBranchingToplevel.AddResumePoint): Hook into
85         ToplevelBlock.AddResumePoint.
86         (FlowBranchingTryCatch): Move CS01626 and CS01631 checks here.
87         (FlowBranchingException): Hook into ExceptionBlock.AddResumePoint.
88         * statement.cs (ToplevelBlock.AddResumePoint): New.  Collect
89         resume points and assign program-counter values.
90         (ExceptionBlock.AddResumePoint): Collect resume points for
91         de-muxer at the top of try block.
92         * iterators.cs (Yield.CheckContext): Simplify.
93         (Yield.Resolve): Use FlowBranching.AddResumePoint.
94
95 2008-04-04  Raja R Harinath  <harinath@hurrynot.org>
96
97         * flowanalysis.cs (FlowBranching.AddReturnOrigin): Change Location
98         argument to an ExitStatement.
99         (FlowBranchingException): Refactor saved origins code.
100         * statement.cs (ExitStatement): Update to cahges.
101         * iterator.cs (YieldBreak): Likewise.
102
103         * statement.cs (ResumableStatement): New.  Common base class for
104         YieldReturn and ExceptionStatement.
105         (ExitStatement): New.  Common base class for Return and YieldBreak.
106         (Return): Update to changes.
107         * iterator.cs (YieldBreak): Likewise.
108         * lambda.cs (ContextualReturn): Likewise.
109
110         Fix #377028
111         * ecore.cs (Expression.ResolveAsTypeStep): If '!silent' attempt to
112         emit a meaningful error message.
113
114         Fix #324765, #319508
115         * flowanalysis.cs (VariableInfo.IsEverAssigned): New.
116         (VariableInfo.SetAssigned): Set it.
117         * statement.cs (Block.UsageWarning): Use 'IsEverAssigned' to
118         determine if CS0219 or CS0168 is appropriate.  Don't use
119         flow-analysis information.
120         (Block.Resolve): Use ec.EndFlowBranching, not ec.DoEndFlowBranching.
121         * codegen.cs (EmitContext.DoEndFlowBranching): Kill.  Inline into ...
122         (EmitContext.EndFlowBranching): ... this.
123
124 2008-04-03  Marek Safar  <marek.safar@gmail.com>
125
126         * class.cs, typemanager.cs: Emit volatile field with IsVolatile modifier.
127
128 2008-04-03  Marek Safar  <marek.safar@gmail.com>
129
130         A fix for bug #376508
131         * convert.cs, expression.cs: Fixed difference between ImplicitConversion and
132         ImplicitConversionExists.
133
134 2008-04-03  Marek Safar  <marek.safar@gmail.com>
135
136         * expression.cs (Binary): Added remaining binary operators to expression
137         tree builder.
138
139         * nullable.cs: Optimize shift with null argument.
140
141 2008-04-03  Raja R Harinath  <harinath@hurrynot.org>
142
143         Fix minor IL regression
144         * statement.cs (TryCatch..ctor): Add 'inside_try_finally' argument.
145         (TryCatch.DoEmit): Use it to avoid creating another ExceptionBlock.
146         * cs-parser.jay (try_statement): Update to changes.
147
148         * statement.cs (TryFinally.need_exc_block): Delete.
149         (TryFinally): Update to changes.
150
151         Now all ExceptionStatements are unconditional
152         * statement.cs (CollectionForeach.DisposableWrapper): New.
153         Extract out the try/finally code into a new wrapper.
154         (CollectionForeach.Resolve): Use it to simplify the code.
155
156 2008-04-02  Raja R Harinath  <harinath@hurrynot.org>
157
158         Start at simplifying ExceptionStatement semantics a bit
159         * statement.cs (TryCatch, TryFinally): Split 'Try' into two pieces.
160         * cs-parser.jay (try_statement): Update to changes.
161         (opt_catch_clauses): Remove.
162         * flowanalysis.cs: Update to changes.
163         (FlowBranching.BranchingType.TryCatch): New.
164         (FlowBranchingTryCatch): New.
165
166         * flowanalysis.cs (FlowBranching.BranchingType.SwitchSection): Kill.
167         (FlowBranching.CreateBranching): Update to changes.
168         (FlowBranchingBlock.AddSibling): Add sanity check.
169         * codegen.cs (EmitContext.StartFlowBranching) <Block variant>:
170         Update to changes.
171
172         * iterators.cs (Iterator.MarkFinally): Remove.
173         * statement.cs (ExceptionStatement): Update to changes.
174
175         Add support for skipping over finally blocks at runtime.  First
176         in a series to fix #324708
177         * iterators.cs (Iterator.SkipFinally): New LocalBuilder.
178         (Iterator.EmitMoveNext): Initialize it.
179         * statement.cs (ExceptionStatement.EmitFinally): Use it to emit a
180         branch over the body of the 'finally' clause.
181
182 2008-03-31  Raja R Harinath  <harinath@hurrynot.org>
183
184         Avoid lopsided use of Foo/DoFoo names
185         * statement.cs (ExpressionStatement.EmitFinallyBody):
186         Rename from EmitFinally.
187         (ExpressionStatement.EmitFinally): Rename from DoEmitFinally.
188         * iterator.cs: Update to changes.
189
190 2008-04-02  Marek Safar  <marek.safar@gmail.com>
191
192         * ecore.cs, expression.cs, nullable.cs: ConditionalLogicalOperator is now
193         based on UserOperatorCall. More binary nullable operators clean up.
194
195 2008-04-02  Martin Baulig  <martin@ximian.com>
196
197         * symbolwriter.cs: Remove the `#if !DISABLE_TERRANIA_CHANGES' conditionals.
198
199 2008-04-02  Marek Safar  <marek.safar@gmail.com>
200
201         * nullable.cs: Merge user and empty conversions when lifting expression
202         trees.
203         
204         * expression.cs (StringConcat): Implemented expression tree representation.
205
206 2008-04-01  Marek Safar  <marek.safar@gmail.com>
207
208         * nullable.cs: When lifting null literal and a user operator exists, no call 
209         is made.
210         
211 2008-04-01  Marek Safar  <marek.safar@gmail.com>
212
213         * nullable.cs, ecore.cs, expression.cs: Convert null arithmetic to lifted
214         null.
215
216 2008-04-01  Marek Safar  <marek.safar@gmail.com>
217
218         * nullable.cs, expression.cs: Use namespace instead heavily nested
219         monster abstract class.
220
221 2008-04-01  Marek Safar  <marek.safar@gmail.com>
222
223         * ecore.cs, convert.cs, constant.cs, nullable.cs, expression.cs: Implemented
224         lifting of null literal and user operators. Clean up of some temporary
225         nullable hacks.
226
227 2008-03-30  Raja R Harinath  <harinath@hurrynot.org>
228
229         Fix #368224, test-629.cs
230         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Return true
231         if it crossed an unwind-protect boundary.
232         * iterators.cs (Yield.CheckContext): Relax check for 'yield break'.
233         (Yield.Resolve, Yield.DoEmit): Track whether the yield occurs
234         inside an unwind-protected region.
235         (YieldBreak.Resolve, YieldBreak.DoEmit): Likewise.
236         (Iterator.MarkYield): Add 'unwind_protect' parameter.  Emit a
237         'leave' instead of a 'br' if unwind-protected.
238         (Iterator.EmitYieldBreak): Likewise.
239
240 2008-03-29  Gert Driesen  <drieseng@users.sourceforge.net>
241
242         * driver.cs: Only define versioninfo resources if no win32 resource
243         file was specified.
244
245 2008-03-28  Marek Safar  <marek.safar@gmail.com>
246
247         A fix for bug #372375
248         * convert.cs: Fixed boxing of nullable types.
249
250 2008-03-28  Marek Safar  <marek.safar@gmail.com>
251
252         * typemanager.cs: Initialize InternalsVisibleTo as the very first optional
253         type.
254
255 2008-03-28  Marek Safar  <marek.safar@gmail.com>
256
257         A fix for bug #374619
258         * nullable.cs: Fixed guarding of EmitBitwiseBoolean.
259         
260 2008-03-27  Marek Safar  <marek.safar@gmail.com>
261
262         * lambda.cs: Check return type only for invocation.
263         
264 2008-03-27  Marek Safar  <marek.safar@gmail.com>
265
266         A fix for bug #374214
267         * ecore.cs: Correctly report argument type mismatch.
268
269 2008-03-27  Marek Safar  <marek.safar@gmail.com>
270
271         * convert.cs (ImplicitReferenceConversionCore): Correctly compare enum type
272         and not rely on broken IsEnum.
273
274 2008-03-27  Marek Safar  <marek.safar@gmail.com>
275
276         * nullable.cs: New file, extracted from generic.cs.
277         
278         * generic.cs, generic-mcs.cs, *.csproj, *.sources: Updated.
279
280 2008-03-27  Marek Safar  <marek.safar@gmail.com>
281
282         * generic.cs, convert.cs, generic-mcs.cs, expression.cs: Added lifting of
283         predefined comparison operators and null literals.
284         
285         * report.cs: New warning ID.
286         
287 2008-03-25  Marek Safar  <marek.safar@gmail.com>
288
289         A fix for bug #370577
290         * lambda.cs: Check return type too.
291
292 2008-03-25  Marek Safar  <marek.safar@gmail.com>
293
294         A fix for bug #372846
295         * class.cs: Automatic properties can be declared as unsafe.
296
297 2008-03-20  Marek Safar  <marek.safar@gmail.com>
298
299         * location.cs: Use string based concatenation.
300         
301         * expression.cs: LiftedBinaryOperator is gmcs only.
302         
303 2008-03-20  Marek Safar  <marek.safar@gmail.com>
304
305         * generic.cs, literal.cs, ecore.cs, expression.cs: Ongoing work on nullable
306         conversions rules and expression trees.
307
308 2008-03-19  Marek Safar  <marek.safar@gmail.com>
309
310         * delegate.cs: Use extension method source as delegate target.
311
312 2008-03-19  Marek Safar  <marek.safar@gmail.com>
313
314         * generic.cs, generic-mcs.cs, expression.cs, ecore.cs: Rewrote nullable
315         binary operations to be purely based on binary operations and optimized
316         emitted code (30% less in some cases). Introduced ReducedExpression for ETs
317         and other ET refactoring.
318         
319         * typemanager.cs: Fixed warning.
320         
321 2008-03-17  Marek Safar  <marek.safar@gmail.com>
322
323         * class.cs, decl.cs, delegate.cs: Do protected modifier check on each member
324         
325         * symbolwriter.cs: Fixed.
326
327 2008-03-17  Marek Safar  <marek.safar@gmail.com>
328
329         * anonymous.cs, driver.cs: Reset anonymous types counters.
330
331 2008-03-17  Marek Safar  <marek.safar@gmail.com>
332
333         * ecore.cs (MethodGroupExpr): Skip first candidate, it's already the best.
334         
335         * class.cs: Use fullname for all type member definitions.
336         
337 2008-02-19  Martin Baulig  <martin@ximian.com>
338
339         * class.cs
340         (IMethodData.EmitExtraSymbolInfo): New interface method.
341         (MethodData.Emit): Call method.EmitExtraSymbolInfo().
342         (MethodOrOperator.EmitExtraSymbolInfo): Implement this new
343         interface method here as an empty public virtual method.
344
345         * anonymous.cs
346         (AnonymousMethodMethod.ctor): Added `string real_name' argument.
347         (AnonymousMethodMethod.EmitExtraSymbolInfo): Override and call
348         CodeGen.SymbolWriter.SetRealMethodName().       
349
350 2008-02-18  Martin Baulig  <martin@ximian.com>
351
352         * anonymous.cs
353         (ScopeInfo.EmitType): Override this and emit debugging
354         information for captured variables.
355         (RootScopeInfo.EmitType): Override this and emit symbol
356         information for a captured `this'.
357
358 2008-02-15  Martin Baulig  <martin@ximian.com>
359
360         * iterators.cs: Emit debugging info.
361
362         * codegen.cs
363         (EmitContext.Flags): Add `OmitDebuggingInfo'.
364         (EmitContext.OmitDebuggingInfo): New public property.
365
366         * statement.cs
367         (While): Override Emit() and don't emit symbol info there; do it
368         inside DoEmit() instead.
369         (Block.Emit): Omit symbol information while emitting the scope
370         initializers; don't ec.Mark() the `EndLocation'.  Fix the lexical
371         block logic.
372         (ExplicitBlock.IsIterator): Moved here from `ToplevelBlock'.
373         (ToplevelBlock.MakeIterator): Pass the `flags' to `ExplicitBlock's
374         .ctor to make `IsIterator' work.
375
376 2008-03-14  Martin Baulig  <martin@ximian.com>
377
378         * symbolwriter.cs: Added the new symbol writer function from the
379         debugger's `terrania' branch; temporarily enclose them inside
380         `#if !DISABLE_TERRANIA_CHANGES' conditionals until I'm back from
381         my vacations.
382
383 2008-03-14  Martin Baulig  <martin@ximian.com>
384
385         * symbolwriter.cs
386         (SymbolWriter): Make this a public static class.
387
388         * codegen.cs
389         (CodeGen.SymbolWriter): Removed; use the new static `SymbolWriter'
390         class instead of using `if (CodeGen.SymbolWriter != null)' everywhere.
391
392 2008-03-14  Marek Safar  <marek.safar@gmail.com>
393
394         A fix for bug #370577
395         * statement.cs, lambda.cs: Added extra limitations when dealing with void
396         return type.
397         
398 2008-03-14  Marek Safar  <marek.safar@gmail.com>
399
400         * typemanager.cs (CSharpName): Made 250 times faster.
401
402 2008-03-13  Marek Safar  <marek.safar@gmail.com>
403
404         * ecore.cs, expression.cs: Emit conversion for ET shift argument.
405         
406 2008-03-12  Marek Safar  <marek.safar@gmail.com>
407
408         * generic.cs, typemanager.cs, enum.cs, codegen.cs, statement.cs: Try not to
409         crash when predefined field does not exist.
410         
411 2008-03-12  Marek Safar  <marek.safar@gmail.com>
412
413         * ecore.cs (PropertyExpr): Fixed IsSingleDimensionalArrayLength regression.
414         
415 2008-03-12  Marek Safar  <marek.safar@gmail.com>
416
417         * class.cs (FixedField): Don't crash when contructors are missing.
418
419 2008-03-11  Marek Safar  <marek.safar@gmail.com>
420
421         * typemanager.cs, namespace.cs, literal.cs, ecore.cs, class.cs, decl.cs,
422         convert.cs, constant.cs, expression.cs, statement.cs: Use same method to
423         check internal types accessibility for internal and external types.
424         Replaced EnumToUnderlying by GetEnumUnderlyingType.
425
426 2008-03-11  Marek Safar  <marek.safar@gmail.com>
427
428         * support.cs, typemanager.cs, pending.cs, ecore.cs, class.cs, delegate.cs
429         convert.cs, const.cs, anonymous.cs, constant.cs, expression.cs,
430         attribute.cs, statement: Use corect instance of predefined types (work
431         related to #364674).
432
433 2008-03-07  Marek Safar  <marek.safar@gmail.com>
434
435         * expression.cs (TypeOfVoid): Fixed predefined method initialization.
436         
437 2008-03-07  Marek Safar  <marek.safar@gmail.com>
438
439         * generic.cs, typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, 
440         class.cs, delegate.cs, iterators.cs, const.cs, constant.cs, driver.cs,
441         expression.cs, attribute.cs, codegen.cs, statement.cs: TypeManager optional
442         predefined types clean up, delayed predefined types members initialization
443         (work related to #364674).
444
445 2008-03-05  Marek Safar  <marek.safar@gmail.com>
446
447         * typemanager.cs (IsFriendAssembly): InternalsVisibleTo is not mandatory.
448         
449 2008-03-05  Marek Safar  <marek.safar@gmail.com>
450
451         * typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, class.cs, decl.cs,
452         delegate.cs, convert.cs, driver.cs, attribute.cs, codegen.cs: TypeManager
453         predefined types clean up (work related to #364674).
454
455 2008-03-04  Marek Safar  <marek.safar@gmail.com>
456
457         * ecore.cs: Print an error message instead of throwing exception.
458         
459 2008-03-04  Marek Safar  <marek.safar@gmail.com>
460
461         * generic.cs, typemanager.cs, literal.cs, convert.cs, cfold.cs, constant.cs,
462         expression.cs, statement.cs: Unififed null literal representation.
463
464 2008-03-03  Marek Safar  <marek.safar@gmail.com>
465
466         * anonymous.cs, cfold.cs, convert.cs, delegate.cs, doc.cs, ecore.cs,
467         expression.cs: Refactored binary operators resolve phase and improved speed.
468         The nullable code is still missing and won't work correctly, more fixes
469         required.
470
471         It also fixes #323726, #324312, #324248, and many other unreported issues.
472
473 2008-02-29  Zoltan Varga  <vargaz@gmail.com>
474
475         * report.cs (FeatureIsNotAvailable): Use 'mcs1' instead of 'mcs', and 'mcs' 
476         instead of 'gmcs'.
477
478 2008-02-27  Marek Safar  <marek.safar@gmail.com>
479
480         * ecore.cs: Clean-up and split BetterConversion.
481         
482 2008-02-25  Raja R Harinath  <harinath@hurrynot.org>
483
484         Fix #363791
485         * enum.cs (EnumMember.Value): Only access 'value' if
486         ResolveValue says it's ok.
487         (EnumMember.DoResolveValue): Don't set prev_member.value.
488         (Enum.GetDefinition): Reverse arguments of Equals --
489         EnumMember.Value can return 'null'.
490
491         * statement.cs (Switch.Error_AlreadyOccurs): Fix typo in name.
492
493 2008-02-22  Marek Safar  <marek.safar@gmail.com>
494
495         * generic.cs, expression.cs: More ongoing work on expression trees.
496         
497 2008-02-21  Marek Safar  <marek.safar@gmail.com>
498
499         * class.cs, typemanager.cs: Rewrote operator matching logic to correctly
500         handle missing matches when mutiple operators exist.
501         
502 2008-02-20  Marek Safar  <marek.safar@gmail.com>
503
504         A fix for bug #363218
505         * expression.cs (ArrayCreation.Clone): Deal with multi-dimensional
506         initializers.
507         
508 2008-02-20  Marek Safar  <marek.safar@gmail.com>
509
510         * expression.cs, constant.cs, cfold.cs: Yet another side-effect constant
511         update. This time to deal correctly with SideEffectConstant expression used
512         as an argument for another constant folding.
513
514 2008-02-20  Raja R Harinath  <harinath@hurrynot.org>
515
516         * typemanager.cs (DropGenericMethodArguments): Ensure we get an underlying
517         MethodBuilder.
518
519 2008-02-19  Marek Safar  <marek.safar@gmail.com>
520
521         * constant.cs, cfold.cs: SideEffectConstant results can apply for folding.
522
523 2008-02-19  Marek Safar  <marek.safar@gmail.com>
524
525         A fix for bug #328136
526         * expression.cs: Do not fold immediately LogicalAnd operators when the left
527         side is a false constant, because we still need to evaluate the right-hand
528         side.
529
530         * statement.cs (If): Emit two types of boolean constants (simple constant,
531         side-effect constant).
532
533 2008-02-19  Marek Safar  <marek.safar@gmail.com>
534
535         * constant.cs (SideEffectConstant): Don't emit boolean constant.
536
537         * expression.cs: Fold immediately LogicalAnd operators when both sides are
538         constants.
539
540 2008-02-18  Marek Safar  <marek.safar@gmail.com>
541
542         A fix for bug #361457
543         * ecore.cs (IsApplicable): Params methods have lower priority.
544
545         * support.cs: Return correct parameter modifier for params types.
546
547 2008-02-18  Marek Safar  <marek.safar@gmail.com>
548
549         * generic.cs (TypeParameter): Cache attribute target name.
550
551         * support.cs: Removed unused variable.
552
553         * typemanager.cs: Removed debugging leftover.
554
555         * ecore.cs: Use local type instead of a property;
556
557         * class.cs (VerifyMembers): Consider also parent to test whether type member
558         is local or public.
559
560         * expression.cs (FullMethodDesc): Removed.
561
562         * attribute.cs (IsValidArgumentType): Made static.
563
564 2008-02-17  Raja R Harinath  <harinath@hurrynot.org>
565
566         Cleanup to be more readable.
567         * Makefile (GMCS_PROFILE): Remove.
568         (COMPILER_NAME): New helper.
569
570 2008-02-15  Miguel de Icaza  <miguel@novell.com>
571
572         * cs-tokenizer.cs: if a conditional expression happens inside a
573         (...) this also means that we do not need to de-ambiguate between
574         an parenthesized expression and a cast.
575
576         Fixes 346484.
577
578         * constant.cs (SideEffectConstant): a constant value that happens
579         to have a side effect.
580
581         Fixes the build regressions introduced by the fix for #359789
582
583 2008-02-14  Rodrigo Kumpera  <rkumpera@novell.com>
584
585         * expression.cs (Conditional.Emit): when emitting the ternary
586         operator, use local variables to generate code verifiable code.
587
588         The verifier cannot infer that the type on stack before the
589         stloc.0 is executed is of type ParentB. This happens because the
590         stack merge algorithm uses only parent types when deciding which
591         is the common type.  This is described in Part III 1.8.1.3 of ECMA
592         335.
593
594         This code compiled with mcs is not verifiable under MS. The MS
595         verifier picks the first common interface of Foo and Bar, which is
596         wrong, but doesn't use a full join type of the 2 interfaces.
597
598         CSC uses a clever hack to compile such code in a verifiable
599         way. It stores the intermediate values in a local variable with
600         the expected type.
601
602         Fixes: #358102
603
604 2008-02-14  Miguel de Icaza  <miguel@novell.com>
605
606         * expression.cs: Do not fold BitwiseAnd operators when the left
607         side is a false constant, because we still need to evaluate the
608         right-hand side.
609
610         Fixes #359789
611
612         * support.cs: Instead of throwing an InternalErrorException when
613         the position of the stream is outside the boundary of our buffer,
614         reset the state of the reader, and restart the reading from the
615         beginning of the file.
616
617 2008-02-14  Marek Safar  <marek.safar@gmail.com>
618
619         * generic.cs (TypeParameter.GetMembers): Is not supported operation.
620
621 2008-02-14  Marek Safar  <marek.safar@gmail.com>
622
623         A fix for bug #361686
624         * decl.cs: A protected types used inside a private class which parents
625         derives from the protected class are accessible.
626
627 2008-02-13  Marek Safar  <marek.safar@gmail.com>
628
629         * generic.cs (ConstraintChecker): Use cached member lookup when looking for
630         the parameterless constructor.
631
632 2008-02-13  Marek Safar  <marek.safar@gmail.com>
633
634         * generic.cs, typemanager.cs, iterators.cs, codegen.cs: Refactored core
635         lookup methods to use standard member cache when doing member lookup.
636
637 2008-02-12  Marek Safar  <marek.safar@gmail.com>
638
639         * driver.cs: Don't report full path for referenced module as assembly error.
640
641 2008-02-12  Marek Safar  <marek.safar@gmail.com>
642
643         * Makefile: Fixed `qh' target to work on all machines.
644
645         * report.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs, anonymous.cs,
646         expression.cs, codegen.cs, statement.cs, doc.cs: Replaced type IsSubclassOf
647         and HasElementType with TypeManager implementation.
648
649 2008-02-08  Marek Safar  <marek.safar@gmail.com>
650
651         A fix for bugs #325134, #359749
652         * expression.cs, ecore.cs: Try to resolve an extension method even if the
653         first binds point to non-method member expression.
654
655 2008-02-08  Marek Safar  <marek.safar@gmail.com>
656
657         * cs-parser.jay: Null coalescing operator is not part of ISO-1.
658
659 2008-02-08  Marek Safar  <marek.safar@gmail.com>
660
661         A fix for bugs #321394, #323028
662         * generic.cs, parameter.cs, ecore.cs, class.cs, decl.cs, delegate.cs:
663         Reworked naive IsAccessibleAs implementation to handle nested types.
664
665 2008-02-05  Jb Evain  <jbevain@novell.com>
666
667         * class.cs: use generic type comparison for parameters
668         as well.
669
670 2008-02-05  Marek Safar  <marek.safar@gmail.com>
671
672         A fix for bug #325372
673         * class.cs: Use generic type comparison when testing method signatures.
674
675 2008-02-05  Marek Safar  <marek.safar@gmail.com>
676
677         A fix for bug #357047
678         * ecore.cs: Applied C# 3.0 changes to better conversion.
679
680 2008-02-05  Marek Safar  <marek.safar@gmail.com>
681
682         A fix for bug #358374
683         * cs-parser.jay: Correctly set modifiers for all constructor types.
684
685 2008-02-04  Marek Safar  <marek.safar@gmail.com>
686
687         A fix for bug #355251
688         * generic.cs: Added base class constraint based type inference.
689
690 2008-02-01  Marek Safar  <marek.safar@gmail.com>
691
692         A fix for bug #357255
693         * decl.cs: One more missing visibility check.
694
695 2008-02-01  Marek Safar  <marek.safar@gmail.com>
696
697         * support.cs: Fixed broken return.
698
699 2008-01-25  Marek Safar  <marek.safar@gmail.com>
700
701         * report.cs: Correctly reset warnings count after probing.
702
703 2008-01-25  Martin Baulig  <martin@ximian.com>
704
705         * namespace.cs
706         (NamespaceEntry.SymbolFileID): Make this work again after
707         MemberName.ToString() is gone.
708
709 2008-01-25  Marek Safar  <marek.safar@gmail.com>
710
711         * expression.cs: Implemented Divide, Equal, ExclusiveOr, GreaterThanOrEqual
712         expressions.
713
714 2008-01-25  Marek Safar  <marek.safar@gmail.com>
715
716         * generic.cs: Use full implicit conversion for type inference fixing.
717
718 2008-01-24  Marek Safar  <marek.safar@gmail.com>
719
720         * ecore.cs, expression.cs, generic.cs: Implemented Convert, ConvertChecked.
721         Fixed user operator conversions.
722
723 2008-01-24  Marek Safar  <marek.safar@gmail.com>
724
725         * generic.cs: Do nullable type to null comparison optimization during
726         resolve phase.
727
728 2008-01-24  Marek Safar  <marek.safar@gmail.com>
729
730         A fix for bug #355163
731         * generic.cs: Enabled l-value resolve on nullable expressions.
732
733 2008-01-24  Marek Safar  <marek.safar@gmail.com>
734
735         A fix for bug #353986
736         * class.cs: Ingore static ctors with parameters for any further checks.
737
738 2008-01-24  Marek Safar  <marek.safar@gmail.com>
739
740         A fix for bug #354310
741         * namespace.cs: Removed redundant check.
742
743 2008-01-24  Marek Safar  <marek.safar@gmail.com>
744
745         A fix for bug #354928
746         * expression.cs: ElementInitializers can be resolved only once.
747
748 2008-01-24  Marek Safar  <marek.safar@gmail.com>
749
750         * convert.cs, ecore.cs, expression.cs, generic.cs: Implemented Coalesce and
751         Condition expressions.
752
753 2008-01-23  Marek Safar  <marek.safar@gmail.com>
754
755         * codegen.cs: Fixed AssemblyBuilder initialization on other platforms.
756
757 2008-01-22  Marek Safar  <marek.safar@gmail.com>
758
759         * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool conversion is
760         not allowed.
761
762         * generic.cs: Implemented coalesce expression.
763
764 2008-01-22  Marek Safar  <marek.safar@gmail.com>
765
766         A fix for bug #355145
767         * anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
768         expression tree type inference.
769
770 2008-01-22  Raja R Harinath  <harinath@hurrynot.org>
771
772         Fix #354663
773         * expression.cs (Binary.IsUnsignedType): Fix typo.
774
775 2008-01-22  Marek Safar  <marek.safar@gmail.com>
776
777         * ecore.cs, expression.cs, generic.cs: Implemented NewArrayInit expression.
778
779 2008-01-22  Marek Safar  <marek.safar@gmail.com>
780
781         A fix for bug #355161
782         * ecore.cs, expression.cs: Wider range of extension method supported
783         expressions.
784
785 2008-01-22  Gert Driesen  <drieseng@users.sourceforge.net>
786
787         * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct
788         AssemblyBuilder to operate in compiler context. Fixes mcs part of
789         bug #354970.
790
791 2008-01-22  Marek Safar  <marek.safar@gmail.com>
792
793         A fix for bug #355148
794         * ecore.cs, expression.cs: Correctly report misused ref and out modifiers.
795
796 2008-01-22  Miguel de Icaza  <miguel@novell.com>
797
798         * expression.cs (CreateExpressionTree): Add support for or and
799         logical or, and indent following the coding conventions.
800
801         * typemanager.cs (LinqExpression): renamed from
802         ExpressionTreeManager, for a shorter name.
803
804         Use TypeManager.CoreLookupType to lookup types from our core
805         assemblies and turn those into "Type" variables.
806
807         Consumers that previously used "Namespace" and "Type" from this
808         class should instead use the TypeExpression which is a type that
809         is fully resolved (without involving the regular C# resolution
810         rules). 
811
812         This typically looks like this:
813
814         TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
815         new MemberAccess (texpr, name, type_arguments, loc)
816
817         This avoids the problem in: #355178
818
819 2008-01-21  Marek Safar  <marek.safar@gmail.com>
820
821         * cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
822         feature in parser only as we do in other cases.
823         
824 2008-01-21  Marek Safar  <marek.safar@gmail.com>
825
826         * attribute.cs, ecore.cs, class.cs, delegate.cs, expression.cs, linq.cs,
827         typemanager.cs: A refactoring of params arguments to reuse existing
828         expressions (params -> array initializer) to emit params argument instead
829         of specialized handling.
830         It was required by expression tree implementation and it has other benefits
831         as well, we now apply same optimization for params arguments as we do for
832         array initializers.
833         
834 2008-01-18  Marek Safar  <marek.safar@gmail.com>
835
836         A fix for bug #353526
837         * generic.cs: A type inference of params arguments may not required any
838         temporary array creation.
839         
840 2008-01-18  Marek Safar  <marek.safar@gmail.com>
841
842         A fix for bug #353534
843         * generic.cs, ecore.cs, expression.cs: A method group type inference is
844         supported for delegates only.
845         
846 2008-01-18  Marek Safar  <marek.safar@gmail.com>
847
848         * generic.cs: Fixed 3.0 type inference fixing phase to determine a unique
849         type for more than 1 candidates.
850         
851 2008-01-18  Marek Safar  <marek.safar@gmail.com>
852
853         * typemanager.cs, ecore.cs, expression.cs: Implemented ArrayLength and Call
854         expressions.
855         
856 2008-01-16  Marek Safar  <marek.safar@gmail.com>
857
858         * generic.cs, typemanager.cs, lambda.cs, parameter.cs, ecore.cs, constant.cs,
859         expression.cs: Implemented Add, And, AndAlso, and ArrayIndex (without unary
860         operator) expressions. 
861                 
862 2008-01-16  Zoltan Varga  <vargaz@gmail.com>
863
864         * statement.cs: Avoid declaring an IL variable for this_variable since it is
865         not accessed from the generated IL.
866
867 2008-01-14  Marek Safar  <marek.safar@gmail.com>
868
869         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, class.cs, delegate.cs,
870         iterators.cs, convert.cs, assign.cs, anonymous.cs, expression.cs,
871         statement.cs: The first expression tree implementation drop, mostly
872         infrastructure work.
873
874 2008-01-14  Marek Safar  <marek.safar@gmail.com>
875
876         * ecore.cs (IsNestedChild): Refactored.
877
878 2008-01-11  Marek Safar  <marek.safar@gmail.com>
879
880         * lambda.cs: Don't use a cast on unknown expression statement.
881
882 2008-01-10  Geoff Norton  <gnorton@novell.com>
883
884         * cs-tokenizer.cs: One more token to distinguish between method and lambda
885         arguments
886
887 2008-01-09  Marek Safar  <marek.safar@gmail.com>
888
889         * doc.cs: Report better /doc crash details.
890         
891 2008-01-09  Marek Safar  <marek.safar@gmail.com>
892
893         A fix for bug #352536
894         * ecore.cs, assign.cs, codegen.cs: Check event assignments.
895
896 2008-01-08  Marek Safar  <marek.safar@gmail.com>
897
898         A fix for bug #352287
899         * ecore.cs, expression.cs: Do `this' access checking in all member access
900         expressions.
901         
902 2008-01-08  Marek Safar  <marek.safar@gmail.com>
903
904         * rootcontext.cs, driver.cs: Switch to linq mode by default.
905         
906         * report.cs: Reset message stacks.
907         
908 2008-01-08  Marek Safar  <marek.safar@gmail.com>
909
910         * generic.cs (InferInPhases): Correctly calculate params position.
911         
912 2008-01-08  Marek Safar  <marek.safar@gmail.com>
913
914         * cs-tokenizer.cs: No need to parse full string when parsing lambda
915         arguments.
916
917 2008-01-07  Marek Safar  <marek.safar@gmail.com>
918
919         * cs-tokenizer.cs: Enabled lambda arguments micro-parser for all profiles.
920         
921         * decl.cs (LookupNamespaceOrType): Don't cache names which caused an error.
922         
923         * driver.cs: Updated --help option.
924         
925 2008-01-07  Marek Safar  <marek.safar@gmail.com>
926
927         * generic.cs (InferParamsTypeArguments): Removed.
928         (InferInPhases): Add params type inference.
929         (LowerBoundInference): Fixed scoring mechanism.
930         
931         * cs-tokenizer.cs (PreProcessPragma): Use Location instead of line.
932         
933 2008-01-06  Gert Driesen  <drieseng@users.sourceforge.net>
934
935         * typemanager.cs: On 2.0 profile, GetPublicKeyToken returns an empty
936         byte array for unsigned "baked" assemblies.
937
938 2008-01-05  Gert Driesen  <drieseng@users.sourceforge.net>
939
940         * codegen.cs: AssemblyName.GetPublicKey returns a zero-length byte
941         array for assemblies that are not strongnamed.
942
943 2008-01-04  Marek Safar  <marek.safar@gmail.com>
944
945         A fix for bug #351481
946         * expression.cs (MemberAccess.ResolveNamespaceOrType): Use correct
947         declaring type for nested generic types.
948         
949 2008-01-04  Marek Safar  <marek.safar@gmail.com>
950
951         * namespace.cs, class.cs, decl.cs, cs-parser.jay: Use GetSignatureForError
952         instead of ToString.
953         
954 2008-01-03  Marek Safar  <marek.safar@gmail.com>
955
956         A fix for bug #351047
957         * expression.cs (Binary.ResolveOperator): Allow equality operators between
958         null and structs only when equality and inequality operators are defined
959         either as an user-operators or predefined operators.
960         
961 2008-01-03  Marek Safar  <marek.safar@gmail.com>
962
963         A fix for bug #351047
964         * generic.cs, typemanager.cs, class.cs: New IsReferenceType helper method.
965         
966 2008-01-03  Marek Safar  <marek.safar@gmail.com>
967
968         A fix for bug #351257
969         * cs-tokenizer.cs: Advance line number for '\r' correctly.
970         
971 2008-01-03  Marek Safar  <marek.safar@gmail.com>
972
973         A fix for bug #351157
974         * class.cs (Using): Fixed yet another broken cloning.
975         
976         (Block): Put back more sensible default value for statements.
977         
978 2008-01-01  Gert Driesen  <drieseng@users.sourceforge.net>
979
980         * codegen.cs: Allow AssemblyVersion with only major version component.
981         Fixes bug #351055.
982
983 2007-12-29  Marek Safar  <marek.safar@gmail.com>
984
985         A fix for bug #324654
986         * class.cs: Use FullName property as member name.
987
988 2007-12-28  Marek Safar  <marek.safar@gmail.com>
989
990         A fix for bug #342117
991         * generic.cs (ConstraintChecker): Struct constraint also satisfies default
992         constructor constraint.
993
994 2007-12-28  Marek Safar  <marek.safar@gmail.com>
995
996         A fix for bug #338273
997         * class.cs (ProbertyBase): Access modifier checks are required for overrides
998         only.
999
1000 2007-12-28  Marek Safar  <marek.safar@gmail.com>
1001
1002         A fix for bug #350839
1003         * ecore.cs (MethodroupExpr): Probing hacks are no longer required.
1004
1005 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
1006
1007         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
1008         GHOP:
1009         
1010         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
1011
1012         * statement.cs: Changed some Hashtables to use HybridDictionaries
1013         instead. It was observed that some HashTables only contained a few
1014         items in the vast majority of cases. Since HybridDictionary is
1015         more efficient on small sets (<10 elements), "known_variables"
1016         from class ExplicitBlock as well as "labels" and "constants " from
1017         class Block were changed to HybridDictionaries. 
1018
1019         Atsai results: (56216kb->54987kb)
1020
1021         Miguel results (bootstrap of mcs): 59819kb -> 59290kb
1022
1023
1024 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
1025
1026         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
1027         GHOP:
1028         
1029         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
1030         
1031         * expression.cs: foreach loop to for loop, saved on allocation of
1032         enumerator (59333kb->59141kb)
1033
1034         * statement.cs. Changed foreach loops to for loops, saved on
1035         allocation of enumerator (59141kb->59006kb)
1036
1037         * decl.cs: ArrayLists in .NET 1.1 allocate 16 elements by default
1038         when constructed with no specified capacity. This was causing a
1039         few ArrayLists to allocate more memory than they would potentially
1040         need in the Block class and MemberCache class. Setting the
1041         ArrayLists to construct with a capacity of 1 saves some
1042         memory. (56216kb->55585kb)
1043
1044 2007-12-27  Marek Safar  <marek.safar@gmail.com>
1045
1046         A fix for bug #347189 (2nd issue)
1047         * expression.cs (MemberAccess): Nested type can be found in base non-generic
1048         type.
1049
1050 2007-12-27  Miguel de Icaza  <miguel@novell.com>
1051         
1052         * report.cs: Do not use colors if stdout and stderr are not a
1053         terminal.
1054
1055 2007-12-27  Marek Safar  <marek.safar@gmail.com>
1056
1057         A fix for bug #346998
1058         * ecore.cs (MethodGroupExpr): Implemented override filter for generic
1059         overloads.
1060
1061 2007-12-27  Marek Safar  <marek.safar@gmail.com>
1062
1063         A fix for bug #343465
1064         * class.cs: Explicit method name for nested types uses dots only.
1065
1066 2007-12-27  Marek Safar  <marek.safar@gmail.com>
1067
1068         A fix for bug #343707
1069         * cs-tokenizer.cs: Advance line number for mixed CR/LF files correctly.
1070
1071 2007-12-27  Marek Safar  <marek.safar@gmail.com>
1072
1073         * ecore.cs: Report type inference errors only when arguments count matches
1074         parameter count.
1075         
1076         * generic.cs (NullCoalescingOperator): Cannot be applied to null.
1077         
1078         * expression.cs, report.cs: New warning.
1079         
1080         * typemanager.cs: Catch anonymous method type too.
1081
1082 2007-12-23  Marek Safar  <marek.safar@gmail.com>
1083
1084         A fix for bug #346379
1085         * expression.cs (UnaryMutator): Emit size of type for pointer mutator.
1086
1087 2007-12-23  Marek Safar  <marek.safar@gmail.com>
1088
1089         A fix for bug #347359
1090         * expression.cs (Invocation): Don't resolve already resolved expression.
1091
1092 2007-12-23  Marek Safar  <marek.safar@gmail.com>
1093
1094         A fix for bug #347189
1095         * class.cs (FixedField): Use non-dependent code only in the define phase.
1096
1097 2007-12-23  Marek Safar  <marek.safar@gmail.com>
1098
1099         A fix for bug #348076
1100         * ecore.cs (FieldExpr.DoResolve): Allow any variable based expression.
1101
1102 2007-12-22  Marek Safar  <marek.safar@gmail.com>
1103
1104         * ecore.cs (MethodGroupExpr.OverloadResolve): Set type arguments for
1105         discovered extension methods.
1106
1107 2007-12-22  Marek Safar  <marek.safar@gmail.com>
1108
1109         * ecore.cs, namespace.cs, expression.cs: Removed broken ResolveGeneric
1110         method.
1111
1112 2007-12-21  Miguel de Icaza  <miguel@novell.com>
1113
1114         * report.cs (ErrorMessage): Add support for using colors on
1115         terminals that support it. 
1116
1117 2007-12-21  Marek Safar  <marek.safar@gmail.com>
1118
1119         * ecore.cs: Use information about expanded params for error reporting.
1120
1121 2007-12-21  Marek Safar  <marek.safar@gmail.com>
1122
1123         * ecore.cs, generic.cs, delegate.cs: Refactoring of method overloading code
1124         and logic for params overloads.
1125         
1126 2007-12-15  Miguel de Icaza  <miguel@novell.com>
1127
1128         * generic.cs (NullCoalescingOperator.CloneTo): implement this one,
1129         as this is also created from the parser.  Fixes #349034
1130
1131 2007-12-12  Miguel de Icaza  <miguel@novell.com>
1132
1133         * statement.cs (Throw.CloneTo): it is valid to have empty
1134         expressions for throw. 
1135
1136 2007-12-03  Marek Safar  <marek.safar@gmail.com>
1137
1138         * cs-parser.jay: Set delegate constraint parsing region correctly.
1139
1140 2007-12-03  Marek Safar  <marek.safar@gmail.com>
1141
1142         A fix for bug #345467
1143         * typemanager.cs (IsEqual): Compare generic parameters position only.
1144         
1145 2007-11-28  Marek Safar  <marek.safar@gmail.com>
1146
1147         * expression.cs (BaseAccess): Type arguments can be null.
1148
1149 2007-11-27  Raja R Harinath  <harinath@gmail.com>
1150
1151         * statement.cs (Block.Resolve): Ensure flow-branching tree is
1152         consistent even when an error has occured.
1153         (Switch.Resolve): Likewise.
1154
1155 2007-11-22  Marek Safar  <marek.safar@gmail.com>
1156
1157         A fix for bug #334505
1158         * class.cs: Don't ignore InternalsVisibleTo attribute for internal
1159         overrides.
1160         
1161 2007-11-22  Marek Safar  <marek.safar@gmail.com>
1162
1163         * ecore.cs, typemanager.cs, delegate.cs, expression.cs: The first of 
1164         refactorings required to resolve extension methods correctly when mixing
1165         generics and non-generics members.
1166         
1167 2007-11-20  Marek Safar  <marek.safar@gmail.com>
1168
1169         A fix for bug #342584
1170         * convert.cs: Added not documented explicit IntPtr/UIntPtr to enum
1171         conversion.
1172         
1173 2007-11-19  Marek Safar  <marek.safar@gmail.com>
1174
1175         A fix for bug #342512
1176         * delegate.cs: Use delegate argument expression when is available. Don't
1177         emit virtual call when class is sealed.
1178         
1179 2007-11-16  Marek Safar  <marek.safar@gmail.com>
1180
1181         A fix for bug #325423
1182         * assign.cs (FieldInitializer): Use resolved expression for emit.
1183         
1184         * class.cs: Print less confusing error message.
1185         
1186 2007-11-16  Marek Safar  <marek.safar@gmail.com>
1187
1188         * cs-tokenizer.cs: Removed GMCS ifdefs.
1189         
1190         * rootcontext.cs, report.cs: Report unavailable gmcs features used by
1191         mcs.
1192         
1193         * cs-parser.jay: Disabled nullable check.
1194         
1195         * generic-mcs: Copied more generic stuff.
1196                 
1197 2007-11-16  Marek Safar  <marek.safar@gmail.com>
1198
1199         * gcs-parser.jay: Merged to cs-parser.jay.
1200         
1201         * generic.cs, typemanager.cs, cs-tokenizer.cs, linq.cs, Makefile
1202         * *.csproj, *.sources: Updated to use only jay parser file.
1203
1204 2007-11-16  Marek Safar  <marek.safar@gmail.com>
1205
1206         * gcs-parser.jay: Added nullable and default expression feature checks.
1207         
1208 2007-11-16  Marek Safar  <marek.safar@gmail.com>
1209
1210         * gcs-parser.jay, cs-parser.jay, class.cs: Unified parameters parsing, 
1211         it fixes many TODOs and hidden bugs.
1212         
1213         * expression: Removed duplicate error check.
1214
1215 2007-11-15  Marek Safar  <marek.safar@gmail.com>
1216
1217         * gcs-parser.jay, statement.cs, decl.cs, ecore.cs: Try to resolve an
1218         implicitly type local variable only when it is used in a declaration.
1219
1220 2007-11-15  Marek Safar  <marek.safar@gmail.com>
1221
1222         * attribute.cs: Use CS0612 for empty strings.
1223
1224 2007-11-14  Marek Safar  <marek.safar@gmail.com>
1225
1226         * lambda.cs, statement.cs: Contextual return may act as a statement.
1227
1228 2007-11-14  Marek Safar  <marek.safar@gmail.com>
1229
1230         A fix for a regression cause by #324222
1231         * class.cs: Don't report unused even when it implements an interface.
1232         
1233 2007-11-13  Marek Safar  <marek.safar@gmail.com>
1234
1235         A fix for bug #341205
1236         * ecore.cs, expression.cs: Method group expression cannot do static
1237         method access with an instance reference check before overloading takes
1238         a place.
1239         
1240 2007-11-13  Marek Safar  <marek.safar@gmail.com>
1241
1242         A fix for bug #325359
1243         * class.cs: Use predictable name for automatically generated property.
1244         
1245 2007-11-12  Marek Safar  <marek.safar@gmail.com>
1246
1247         A fix for bug #324996
1248         * expression.cs (Is): Handle case where D is nullable and T is not
1249         correctly.
1250         
1251         * generics.cs (Nullable.HasValue): Nullable HasValue expression.
1252         
1253 2007-11-12  Marek Safar  <marek.safar@gmail.com>
1254
1255         * generic.cs, literal.cs, ecore.cs, class.cs, delegate.cs, const.cs,
1256         anonymous.cs, expression.cs, attribute.cs, codegen.cs, statement.cs:
1257         Flush small error reporting changes.
1258         
1259 2007-11-09  Marek Safar  <marek.safar@gmail.com>
1260
1261         A fix for bug #324996
1262         * expression.cs: Rewrote Is expression implementation to work with
1263         generics, nullable types, anonymous method. A const result expression 
1264         uses existing infrastructure instead of custom not fully-featured one.
1265         
1266 2007-11-08  Marek Safar  <marek.safar@gmail.com>
1267
1268         A fix for bug #340202
1269         * class.cs: Consider generics for volatile field.
1270
1271 2007-11-08  Marek Safar  <marek.safar@gmail.com>
1272
1273         A fix for bug #335594
1274         * expression.cs: Use conversion rules when handling string addition.
1275         
1276 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1277
1278         A fix for bug #336651
1279         * expression.cs: Fixed a crash when probing is on.
1280         
1281 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1282
1283         A fix for bug #324242
1284         * covert.cs: Added a conversion from any nullable-type with an 
1285         underlying enum-type to the type System.Enum.
1286         
1287 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1288
1289         A fix for bug #324222
1290         * class.cs: Report all non-used event fields.
1291         
1292 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1293
1294         A fix for bug #325161
1295         * cs-parser.jay, gcs-parser.jay, decl.cs: Implemented namespace alias
1296         qualifier for generic types.
1297         
1298 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1299
1300         A fix for bug #322971
1301         * expression.cs, ecore.cs: Added intermediate result value check for
1302         indexers. 
1303         
1304 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1305
1306         A fix for bug #324754
1307         * cs-parser.jay, gcs-parser.jay, class.cs: Try to create an interator
1308         when it was requested.
1309
1310 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1311
1312         A fix for bug #325101
1313         * expression.cs: Do type not value comparison for `is' expression.
1314
1315 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1316
1317         A fix for bug #320236
1318         * convert.cs: Don't apply user conversion on underlying target type.
1319
1320 2007-11-06  Marek Safar  <marek.safar@gmail.com>
1321
1322         * expression.cs: Don't use unresolved expression for error reporting.
1323  
1324 2007-11-06  Marek Safar  <marek.safar@gmail.com>
1325
1326         A fix for bugs #337712, #324490
1327         * ecore.cs (MethodGroupExpr): Refactored to handle delegate method
1328         overloading resolution too.
1329         
1330         * delegate.cs: Uses MethodGroupExpr for overloading resolution. It makes
1331         the process consistent and more robust.
1332         
1333         * expression.cs, linq.cs, report.cs: Update.
1334
1335 2007-11-02  Marek Safar  <marek.safar@gmail.com>
1336
1337         A fix for bug #332909
1338         * attribute.cs: Resolve attributes in correct context using error
1339         handling procedure.
1340         
1341         * rootcontext.cs: Define Obsolete attribute members as core members.
1342         
1343 2007-11-02  Marek Safar  <marek.safar@gmail.com>
1344
1345         * statement.cs: Removed unused methods.
1346         
1347 2007-10-31  Wade Berrier  <wberrier@novell.com>
1348
1349         * Makefile:  reenable copy of gmcs.exe.config, but include it in EXTRA
1350         DIST (it doesn't get included because PROGRAM isn't defined to be gmcs
1351         during 'make dist')
1352
1353 2007-10-31  Marek Safar  <marek.safar@gmail.com>
1354
1355         A fix for bug #338102
1356         * decl.cs (CheckExistingMembersOverloads): Workaround issue with generic
1357         methods registered as non-generics.
1358         
1359 2007-10-31  Marek Safar  <marek.safar@gmail.com>
1360
1361         A fix for bugs #337712, #324490
1362         * delegate.cs: Delegate covariance and contravariance is not allowed for
1363         value types.
1364         
1365 2007-10-31  Marek Safar  <marek.safar@gmail.com>
1366
1367         A fix for bug #337719 
1368         * cs-tokenizer.cs: Restore identifier buffer when parsing contextual
1369         `from' keyword.
1370         
1371 2007-10-30  Marek Safar  <marek.safar@gmail.com>
1372  
1373         * Makefile (net_2_0_bootstrap/mcs.exe.config): Reverted copy gmcs.exe.config.
1374
1375 2007-10-29  Marek Safar  <marek.safar@gmail.com>
1376  
1377         * cs-tokenizer.cs, gcs-parser.jay, driver.cs: Fixed parsing of nested
1378         query expressions.
1379
1380 2007-10-29  Raja R Harinath  <rharinath@novell.com>
1381
1382         * Makefile (net_2_0_bootstrap/mcs.exe.config): Copy gmcs.exe.config.
1383
1384 2007-10-29  Marek Safar  <marek.safar@gmail.com>
1385  
1386         A fix for bug #334652
1387         * ecore.cs (MethodGroupExpr.OverloadResolve): Do also lookup for
1388         extension methods when we have not found the best candidate in normal
1389         container.
1390
1391 2007-10-27  Marek Safar  <marek.safar@gmail.com>
1392
1393         * AssemblyInfo.cs: Keep up-to-date.
1394
1395 2007-10-27  Marek Safar  <marek.safar@gmail.com>
1396
1397         * Makefile: Fixed generics compiler name.
1398         
1399 2007-10-27  Marek Safar  <marek.safar@gmail.com>
1400
1401         * lambda.test: removed, lambda parsing is done differently.
1402         
1403         * gen-il.cs, gen-treedump.cs, old-code.cs : Obsolete.
1404
1405 2007-10-27  Gert Driesen  <drieseng@users.sourceforge.net>
1406
1407         * Makefile: Removed dependency on gmcs.exe.config. Fixes build.
1408
1409 2007-10-27  Marek Safar  <marek.safar@gmail.com>
1410
1411         * Makefile, *.sources : All C# compilers are in mcs folder.
1412         
1413         * *.cs: Use existing 2_1 define for smcs.
1414
1415 2007-10-26  Marek Safar  <marek.safar@gmail.com>
1416
1417         A fix for bug #335847
1418         * assign.cs, expression.cs: Couple of changes to avoid creating a
1419         temporary variable for each object initializer assignment statement. It
1420         simplifies struct initialization too, otherwise two temporary variables
1421         would be required.
1422         Implemented optimization of redundant default element initializers.
1423         
1424 2007-10-25  Marek Safar  <marek.safar@gmail.com>
1425
1426         A fix for bug #336766
1427         * expression.cs (Class.CheckBase): Use generic name when method is
1428         generic.
1429         
1430 2007-10-25  Marek Safar  <marek.safar@gmail.com>
1431
1432         A fix for bug #334737
1433         * expression.cs (IndexerAccess.EmitAssign): Emit local temporary
1434         variable and not variable argument for prepared copies.
1435
1436 2007-10-24  Marek Safar  <marek.safar@gmail.com>
1437
1438         A fix for bug #325110
1439         * class.cs, expression.cs, attribute.cs: Use open generic method when
1440         checking conditional attribute.
1441         
1442 2007-10-24  Marek Safar  <marek.safar@gmail.com>
1443
1444         * report.cs, cs-tokenizer.cs, class.cs, cs-parser.jay, anonymous.cs, 
1445         expression.cs, statement.cs: Renamed method FeatureIsNotISO to
1446         FeatureIsNotAvailable.
1447
1448 2007-10-24  Marek Safar  <marek.safar@gmail.com>
1449
1450         ** C# 3.0 Partial methods
1451         
1452         * cs-tokenizer.cs, support.cs, class.cs, decl.cs: Implemented partial
1453         methods support. Because of member cache issue with generics only
1454         non-generics partial methods are fully supported.
1455         
1456 2007-10-23  Marek Safar  <marek.safar@gmail.com>
1457         
1458         * class.cs, decl.cs: Rewrote member overloads check to cope with 
1459         generics and to use member cache for member checking. It also improves
1460         performance and fixes remaining overloads issues.
1461         
1462 2007-10-20  Marek Safar  <marek.safar@gmail.com>
1463         
1464         * class.cs, const.cs, decl.cs, delegate.cs, enum.cs, generic.cs,
1465         roottypes.cs, typemanager.cs:
1466                 
1467         A member cache creation logic changed to add members immediately and
1468         not rely on fallback. The member cache is now only prefered way
1469         how to access and find type declaration members. It saves 5 MB of memory
1470         during MWF compilation and makes code ready for more optimizations and
1471         clean-ups, it's also a pre-requirement for partial methods.
1472         
1473 2007-10-18  Raja R Harinath  <harinath@gmail.com>
1474
1475         * ecore.cs (Expression.Error_ValueCannotBeConverted): Add special
1476         handling for generic parameters.
1477
1478 2007-10-15  Marek Safar  <marek.safar@gmail.com>
1479         
1480         * class.cs (FixedField): Removed redundant volatile check.
1481         
1482 2007-10-15  Marek Safar  <marek.safar@gmail.com>
1483         
1484         * class.cs, decl.cs: Fixed overload members verification to do only one
1485         check per possible collision.
1486         
1487 2007-10-13  Marek Safar  <marek.safar@gmail.com>
1488         
1489         A fix for bug #325478
1490         * anonymous.cs (AnonymousContainer.Compatible): Merge are flags together
1491         and create only one disposable flags container.
1492         
1493 2007-10-12  Marek Safar  <marek.safar@gmail.com>
1494         
1495         A fix for bug #332442 by Alexandre Gomes <alexmipego@gmail.com>
1496         * statement.cs (Fixed): Fixed variables cloning.
1497         
1498 2007-10-12  Marek Safar  <marek.safar@gmail.com>
1499         
1500         A fix for bug #333342
1501         * class.cs (EventField): Don't mark value type event as synchronized. 
1502         
1503 2007-10-12  Marek Safar  <marek.safar@gmail.com>
1504         
1505         * ecore.cs, anonymous.cs (MethodGroupExpr): Use score from type
1506         inference to identify best candidate method correctly.
1507         (ProperyExpr): A range variable is read only and cannot be modified.
1508         
1509 2007-10-11  Marek Safar  <marek.safar@gmail.com>
1510         
1511         * ecore.cs, delegate.cs (MethodGroupExpr): Refactored best candidate
1512         logic to identify best candidate method correctly.
1513         
1514 2007-10-11  Marek Safar  <marek.safar@gmail.com>
1515         
1516         * location.cs (Equals, GetHashCode): Removed.
1517         
1518 2007-10-11  Marek Safar  <marek.safar@gmail.com>
1519         
1520         * report.cs: Implemented message recorder. It is used mainly for lambda
1521         expressions to capture otherwise swallowed error messages.
1522         
1523         * anonymous.cs, lambda.cs.cs: Do full parameters check.
1524
1525         * ecore.cs (ExtensionMethodGroup): Report binding failure at the botton
1526         and not at the top.
1527         (MethodGroupExpr.DoResolve): Use message recorder for error handling.
1528                 
1529         * expression.cs (MemberAccess): Always report lookup failure.
1530         
1531         * location.cs: Implemented Equals, GetHashCode.
1532         
1533         * statement.cs (Return.DoResolve): Fixed hardcoded error argument.
1534         
1535 2007-10-10  Jb Evain  <jbevain@novell.com>
1536
1537         * codegen.cs: re-enable assembly version check.
1538
1539 2007-10-09  Marek Safar  <marek.safar@gmail.com>
1540         
1541         * report.cs, anonymous.cs, driver.cs, expression.cs: Added few ISO-2
1542         checks.
1543         
1544         * namespace.cs (UsingAlias): Do correct version check.
1545         
1546 2007-10-08  Marek Safar  <marek.safar@gmail.com>
1547         
1548         * expresison.cs, ecore.cs: Issue extension method error message when
1549         appropriate.
1550         
1551         * rootcontext.cs: Added ISO_2 compiler mode option.
1552
1553 2007-10-08  Marek Safar  <marek.safar@gmail.com>
1554         
1555         * expresison.cs (UnaryMutator.ResolveOperator): Print more useful error
1556          message.
1557         
1558 2007-10-08  Marek Safar  <marek.safar@gmail.com>
1559         
1560         * attribute.cs (GetString, GetBoolean): Work with both literal and
1561         constant.
1562         
1563         * ecore.cs, expresison.cs, delegate.cs (Invocation, MethodGroupExpr):
1564         Moved method overload specific methods to MethodGroupExpr.
1565         
1566         (IndexerAccess): Re-wrote resolving mechanism, fixed many issues and
1567         it should be less memory consuming.
1568         
1569 Mon Oct 8 09:29:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
1570
1571         * codegen.cs: remove the assembly version check until the buildbot is
1572         fixed.
1573
1574 2007-10-07  Jb Evain  <jbevain@novell.com>
1575
1576         * attribute.cs (Attribute.GetString): if the value
1577         expression is a StringConstant, return its string value.
1578
1579 2007-10-07  Jb Evain  <jbevain@novell.com>
1580
1581         * typemanager.cs: add `assembly_version_attribute_type`.
1582         * codegen.cs: on attribute emission, check that the
1583         AssemblyVersionAttribute doesn't overflow.
1584
1585 2007-10-05  Marek Safar  <marek.safar@gmail.com>
1586         
1587         A fix for bug #324677
1588         * anonymous.cs, decl.cs: Yes another anonymous container hack. Overwrite
1589         parent container of a scope container with currently resolved one. 
1590         
1591 2007-10-05  Marek Safar  <marek.safar@gmail.com>
1592         
1593         A fix for bug #325534
1594         * class.cs (Invocation.DoResolve): Check invocation of object finalizer
1595         only.
1596         
1597 2007-10-05  Marek Safar  <marek.safar@gmail.com>
1598         
1599         A fix for bug #327504
1600         * class.cs (Operator.Define): Refactored implicit and explicit user
1601         operator conversion rules.
1602         
1603 2007-10-05  Marek Safar  <marek.safar@gmail.com>
1604         
1605         A fix for bug #327520
1606         * ecore.cs (ExtensionMethodGroupExpr): Emit resolved extension argument.
1607         
1608 2007-10-04  Marek Safar  <marek.safar@gmail.com>
1609         
1610         A fix for bug #328022
1611         * class.cs (MethodData.Define): Use correct method to check whether
1612         a method implementents an accessor.
1613         
1614 2007-10-04  Marek Safar  <marek.safar@gmail.com>
1615         
1616         A fix for bug #330069
1617         * statement.cs (Fixed.Resolve): Read the first array element only when
1618         an array is instantiated. 
1619         
1620 2007-10-04  Marek Safar  <marek.safar@gmail.com>
1621         
1622         * expression.cs, assign.cs, generics.cs: Print correct operator when
1623         compound assignment is used.
1624         
1625 2007-10-04  Marek Safar  <marek.safar@gmail.com>
1626         
1627         A fix for bug #325841
1628         * expression.cs (ArrayAccess): Use full argument cloning only for
1629         string compound concatenation.
1630         
1631 2007-10-03  Marek Safar  <marek.safar@gmail.com>
1632         
1633         A fix for bug #328774
1634         * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
1635         assignment.
1636         (PropertyExpr.EmitAssign): Fixed string concatenation compound
1637         assignment.
1638
1639 2007-10-03  Raja R Harinath  <rharinath@novell.com>
1640
1641         Fix #328490
1642         * ecore.cs (SimpleName.DoSimpleNameResolve): Handle Property and
1643         Event accessibility checks here.  Remove some bogus code that
1644         accidently made GenericMethods work.
1645         (PropertyExpr.IsAccessibleFrom, EventExpr.IsAccessibleFrom): New.
1646
1647 2007-09-25  Marek Safar  <marek.safar@gmail.com>
1648         
1649         * expression.cs (ArrayCreation): Fixed cloning of an implicit types.
1650         
1651         * statement.cs (Block): Refactored AddVariable to allow error handling
1652         customization.
1653         
1654         * generic.cs: New stub.
1655         
1656 2007-09-23  Marek Safar  <marek.safar@gmail.com>
1657         
1658         * anonymous.cs, codegen.cs: Changed InferReturnType to be EmitContext
1659         flag.
1660         
1661 2007-09-17  Marek Safar  <marek.safar@gmail.com>
1662
1663         * class.cs: Use partial container to record whether any partial part
1664         contains static field initializer and therefore default contructor has
1665         to be defined.
1666         
1667 2007-09-14  Marek Safar  <marek.safar@gmail.com>
1668
1669         * class.cs (TypeContainer.AddPartial): Fixed an issue reported on
1670         mono-list when only one of two partial parts has defined accessibility
1671         modifier.
1672         
1673 2007-09-14  Marek Safar  <marek.safar@gmail.com>
1674
1675         A fix for bug #82845
1676         
1677         * class.cs (TypeContainer): Set correct resolve context for all field
1678         initializers.
1679         
1680 2007-09-13  Marek Safar  <marek.safar@gmail.com>
1681
1682         * assign.cs: Fixed a crash when field is resolved twice with an error.
1683         
1684         * codegen.cs: Changed InFieldInitializer to be flag.
1685         
1686         * anonymous.cs, ecore.cs, expression.cs: Update after
1687         IsInFieldInitializer rename.
1688         
1689         * const.cs: Removed unused parameter.
1690         
1691         * class.cs: Changed the way how we resolve and emit field initializers.
1692         The field initilizers have to have access to contructor block to emit
1693         compiler generated code.
1694
1695 2007-09-13  Marek Safar  <marek.safar@gmail.com>
1696
1697         * expression.cs (MemberAccess.DoResolve): DeclSpace is broken by
1698         generics use TypeContainer instead.
1699         
1700 2007-09-12  Marek Safar  <marek.safar@gmail.com>
1701         
1702         * generic.cs (TypeInferenceContext.InflateGenericArgument): Stub.
1703
1704         * lambda.cs (ResolveParameters): Use more powerful
1705         InflateGenericArgument.
1706         
1707         * parameters.cs: Better exception message.
1708                 
1709 2007-09-10  Marek Safar  <marek.safar@gmail.com>
1710
1711         * anonymous.cs (AnonymousMethodExpression.CompatibleChecks): Report
1712         correct expression block type. 
1713         
1714         * ecore.cs (Expression.Error_MemberLookupFailed): Made virtual.
1715         
1716         * expression.cs (Invocation): Extracted method group resolve to
1717         DoResolveOverload.
1718         
1719 2007-09-07  Marek Safar  <marek.safar@gmail.com>
1720
1721         * ecore.cs (Expression.MemberLookupFinal): Removed unused loc parameter.
1722         (MethodGroupExpr.ResolveGeneric): Use existing method group instance.
1723         
1724         * expression.cs (MemberAccess.DoResolve): Uses generic resolver for
1725         generic extension methods.
1726
1727 2007-09-06  Marek Safar  <marek.safar@gmail.com>
1728
1729         A fix for bug #82676 (Do I get it right now?)
1730         * convert.cs (Binary.ResolveOperator): An interface is converted to the
1731         object before a standard conversion is applied.
1732         
1733 2007-09-06  Marek Safar  <marek.safar@gmail.com>
1734
1735         * convert.cs (ImplicitReferenceConversionCore): Reverted wrong fix of
1736         #82676.
1737         
1738 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1739
1740         A fix for bug #82676
1741         * convert.cs (ImplicitReferenceConversionCore): Check both sides for
1742         non-generic interface types.
1743         
1744 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1745
1746         A fix for bug #82690
1747         * ecore.cs (PropertyExpr.EmitAssign): Leave a copy does just that.
1748         
1749 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1750
1751         A fix for bug #82571
1752         * anonymous.cs (AnonymousMethod.DoCreateMethodHost): Use internal 
1753         modifier for container based methods.
1754         
1755 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1756
1757         A fix for bug #82676
1758         * convert.cs (ImplicitReferenceConversionCore): From any class-type S to
1759         any interface-type T means to any of interface type T.
1760
1761 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1762
1763         * namespace.cs: We have 2 versions of System.Core assembly.
1764
1765 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1766
1767         A fix for bug #82652
1768         * class.cs (Class.GetClassBases): Compare types and not expressions.
1769
1770 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1771
1772         A fix for bug #82620
1773         * expression.cs (Invocation.EmitArguments): Duplicate params arguments
1774         actually never worked before.
1775         (IndexerAccess): Emit prepared arguments before they are modified.
1776         
1777 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1778
1779         A fix for bug #82563
1780         * assign.cs: Revert wrong fix.
1781         
1782         * expression.cs (VariableReference.EmitAssign): Handle ref reference
1783         correctly.
1784         (ArrayAccess): Changed the way we emit compound (prepared) assignments.
1785         Instead of ldelema/stdind we have to use temporary variables to handle
1786         cases like String.Concat (params string[]).
1787         
1788 2007-08-31  Marek Safar  <marek.safar@gmail.com>
1789
1790         * class.cs: EmitAttributes to Emit rename.
1791         
1792         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Parent can be
1793         null.
1794         (MemberCore.HasClsCompliantAttribute): Don't depend on 
1795         GetClsCompliantAttributeValue execution.
1796         
1797 2007-08-31  Marek Safar  <marek.safar@gmail.com>
1798
1799         * anonymous.cs: Use shorter type prefix.
1800         
1801         * ecore.cs (SimpleName.DoSimpleNameResolve): Use transparent identifiers
1802         when exist.
1803         
1804         * expression.cs (LocalVariableReference.DoResolveBase): Don't capture
1805         variables when probing is on.
1806         
1807         * statement.cs (LocaLInfo.Clone): Clone correctly resolved and 
1808         unresolved variables.
1809         (TopLevelBlock.GetTransparentIdentifier): Default implementation doesn't
1810         handle transparent identifiers.
1811         
1812 2007-08-26  Marek Safar  <marek.safar@gmail.com>
1813
1814         * attribute.cs (IsClsCompliant): Add nullable types test.
1815         
1816 2007-08-24  Atsushi Enomoto  <atsushi@ximian.com>
1817
1818         * doc.cs : catch other types of exception than XmlException to
1819           report CS1570. Fixed bug #82565.
1820
1821 2007-08-23  Marek Safar  <marek.safar@gmail.com>
1822
1823         * anonymous.cs (AnonymousMethodExpressin.ExplicitTypeInference): 
1824         The number of delegate parameters has to match.
1825         (AnonymousMethodExpressin.VerifyParameterCompatibility): Handles generic
1826         arrays.
1827
1828 2007-08-21  Marek Safar  <marek.safar@gmail.com>
1829
1830         * anonymous.cs (AnonymousMethod): Generate private anonymous method
1831         to fix problem with private arguments.
1832
1833 2007-08-20  Marek Safar  <marek.safar@gmail.com>
1834
1835         * anonymous.cs (AnonymousTypeClass): An anonymous type can be empty.
1836         
1837         * decl.cs (MemberName): Ignore generic type with no generic arguments. 
1838         
1839         * expression.cs (AnonymousTypeDeclaration): An anonymous type can be
1840         empty. Add cloning suport.
1841         
1842         * roottypes.cs (GetAnonymousType): Fixed argument comparison logic.
1843
1844 2007-08-20  Marek Safar  <marek.safar@gmail.com>
1845
1846         * convert.cs, ecore.cs, expression.cs, literal.cs: Use factory method 
1847         to create EmptyCast. It handles EmptyConstantCast specialization for
1848         constants.
1849         
1850 2007-08-18  Marek Safar  <marek.safar@gmail.com>
1851
1852         * expression.cs (Binary.is_unsigned): Handle unsafe types too.
1853         (EmitArrayArgument): One routine for array arguments.
1854         (ArrayCreation.MakeByteBlob): Fixed an array alignment. 
1855         
1856 2007-08-17  Marek Safar  <marek.safar@gmail.com>
1857
1858         * cs-tokenizer.cs (GetKeyword): Handle from keyword in a different way.
1859
1860 2007-08-17  Marek Safar  <marek.safar@gmail.com>
1861
1862         * anonymous.cs: MemberLookupFinal update.
1863
1864         * class.cs (ConstructorInitializer): Is expression based.
1865         
1866         * delegate.cs: MethodGroupExpr update.
1867         
1868         * ecore.cs  (Error_MemberLookupFailed): Improved to report better error
1869         messages.
1870         (Error_MemberLookupFailed): Customizable error override.
1871         (MethodGroupExpr): Keep queried type for later usage.
1872         (MethodGroupExpr.OverloadResolve): Catch errors related to overload
1873         resolve.
1874         
1875         * expression.cs: Error_MemberLookupFailed refactoring.
1876         (New.DoResolve): Resolve as much as possible.
1877         (ElementInitializer.Error_MemberLookupFailed): Object initializer
1878         customization for invalid member types.
1879
1880         * statement.cs: MethodGroupExpr update.
1881         
1882 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1883
1884         * modifier.cs (Check): Check all modifiers and not only accessibility
1885         ones.
1886
1887 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1888
1889         * ecore.cs (Expression.Error_ValueCannotBeConverted): Report always a
1890         type and not an expression.
1891
1892 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1893
1894         * statement.cs (Catch.Clone): Type and variable can be null.
1895
1896 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1897
1898         A fix for bug #81979
1899         * assign.cs (Assign.Emit): Prepare arguments for string concatenation.
1900         I am really not sure whether this is the best fix.
1901         
1902         * expression.cs (VariableReference.EmitAssign): Do prepare_load test
1903         only once.
1904         
1905 2007-08-14  Marek Safar  <marek.safar@gmail.com>
1906
1907         ** C# 3.0 Object and collection initializers (major re-write)
1908         
1909         * assign.cs (DoResolve): Initializers are not assign related.
1910         
1911         * codegen.cs (EmitContext.CurrentInitializerVariable): Holds a varible
1912         used during collection or object initialization.
1913         
1914         * expression.cs (Error_InvalidArguments): Add initializers specific
1915         messages. More will come later because it requires some general
1916         refactoring.
1917         (New.DoResolve): Better error handling for unsafe types.
1918         (EmptyExpressionStatement): New class.
1919         (ElementInitializer): An object initializer expression.
1920         (CollectionElementInitializer): A collection initializer expression.
1921         (CollectionOrObjectInitializers): A block of object or collection
1922         initializers.
1923         (NewInitialize): New expression with element/object initializers.
1924         
1925         * statement.cs: Reverted object/collection initializer hacks.
1926         
1927         * typemanager.cs (CSharpName): Filter __arglist type.
1928         
1929 2007-08-09  Marek Safar  <marek.safar@gmail.com>
1930
1931         ** C# 3.0 Anonymous Types (update to the latest standard)
1932         
1933         * expression.cs (Binary.ResolveOperator): Threat all null based types
1934         same.
1935         (AnonymousTypeDeclaration): Renamed from AnonymousType and simplified.
1936         (AnonymousTypeParameter): Updated.
1937         
1938         * anonymous.cs (CompilerGeneratedClass): Add custom name overload.
1939         (AnonymousTypeClass): New anonymous type container.
1940         
1941         * class.cs (AddField): Return operation result.
1942         
1943         * generic.cs: Another empty TypeArguments overload.
1944         
1945         * roottypes.cs (AddAnonymousType, GetAnonymousType): Anonymous types
1946         are stored at top of normal hierarchy.
1947         
1948         * typemanager.cs (CSharpName): Filter anonymous types.
1949         
1950 2007-08-09  Marek Safar  <marek.safar@gmail.com>
1951
1952         * expression.cs (StringConcat.Append): Handle 3 and more concatenation
1953         as single Concat call. How could we miss that :-(
1954         
1955 2007-08-08  Marek Safar  <marek.safar@gmail.com>
1956
1957         * expression.cs (ArrayCreation.CloneTo): Allocate exact size.
1958         
1959 2007-08-07  Miguel de Icaza  <miguel@novell.com>
1960
1961         * expression.cs: Fix the previous commit, the creation of the
1962         arguments array list needs also to be conditional on the arguments
1963         not being null.
1964
1965         * class.cs: Add a little bit of help to help narrow down problems.
1966
1967         * expression.cs (ArrayCreation.CloneTo): Argument can be null, do
1968         not try to copy in that case. 
1969
1970         * driver.cs: When building SMCS, include a new different set of
1971         default assemblies here.   Do this here so we can control whether
1972         to include the default assemblies with /noconfig.
1973
1974 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1975
1976         A fix for bug #81979
1977         * expression.cs (TypeOf.GetAttributableValue): Check for type arguments
1978         only.
1979
1980 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1981
1982         A fix for bug #82300
1983
1984         * anonymous.cs (AnonymousContainer.Define): Don't define anything when
1985         we are in probing scope.
1986
1987 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1988
1989         A fix for bug #82301
1990
1991         * statement.cs (Catch.CloneTo): Clone blocks in the right order.
1992         (Statement.CloneTo): Clone and not map children blocks.
1993
1994 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1995
1996         A fix for bug #82299
1997
1998         * expression.cs (LocalVariableReference.CloneTo): Remap local info
1999         variable too.
2000         
2001         * statement.cs (Statement.CloneTo): Clone variables before statements
2002         to allow remaping of local variables.
2003
2004 2007-08-03  Marek Safar  <marek.safar@gmail.com>
2005
2006         A fix for bug #82296
2007
2008         * anonymous.cs,
2009         * report.cs: Log crash details for future clone problems.
2010         
2011         * statement.cs (Return.Clone): Don't clone non-existent expression.
2012
2013 2007-08-03  Raja R Harinath  <harinath@gmail.com>
2014
2015         * class.cs (TypeContainer.AddBasesForPart): Make virtual.
2016         (Class.AddBasesForPart): Move CS0537 check here from ...
2017         * cs-parser.jay (class_declaration): ... here.  Move calling of
2018         'AddBasesForPart' to ...
2019         (class_bases): ... here.
2020         (struct_declaration, interface_declaration): Update to changes.
2021
2022 2007-08-02  Marek Safar  <marek.safar@gmail.com>
2023
2024         A fix for bug #81923
2025
2026         * statement.cs (Using.ResolveLocalVariableDecls): Only non-user implicit
2027         conversion is allowed.
2028
2029 2007-08-02  Marek Safar  <marek.safar@gmail.com>
2030
2031         A fix for bug #81564
2032
2033         * ecore.cs (EventExpr): Add IsBase handling.
2034
2035         * expression.cs (BaseAccess.CommonResolve): Events can use base accessor
2036         too.    
2037         
2038 2007-08-02  Raja R Harinath  <harinath@gmail.com>
2039
2040         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
2041         * cs-parser.jay: Some whitespace cleanups.
2042         (current_delegate): New.
2043         (type_name): New.
2044         (struct_declaration): Make similar to gmcs/cs-parser.jay -- add
2045         a dummy code block, and use 'type_name' instead of 'member_name'.
2046         (interface_declaration, class_declaration): Likewise.
2047         (delegate_declaration): Likewise.  Rearrange slightly and use
2048         'current_delegate'.
2049         * cs-tokenizer.cs (handle_where): Rename from handle_constraints.
2050         (GetKeyword): Update to change.  Use '!foo' instead of 'foo == false'.
2051
2052 2007-08-02  Marek Safar  <marek.safar@gmail.com>
2053
2054         A fix for bug #82039
2055
2056         * ecore.cs (TypeLookup.GetSignatureForError): Use name when type is not
2057         available.
2058
2059         * typemanager.cs (CSharpName): Split to string overload.
2060
2061 2007-08-02  Marek Safar  <marek.safar@gmail.com>
2062
2063         * expression.cs,
2064         * report.cs: Updated warning CS0472.
2065
2066 2007-08-01  Marek Safar  <marek.safar@gmail.com>
2067
2068         A fix for bug #82181
2069         * cs-parser.jay,
2070         * cs-tokenizer.cs: Ignore partial keyword inside block expression.
2071
2072 2007-08-01  Marek Safar  <marek.safar@gmail.com>
2073
2074         A fix for bug #82277
2075         * statememnt.cs (Block.Clone): Don't clone explicit blocks twice.
2076
2077 2007-08-01  Marek Safar  <marek.safar@gmail.com>
2078
2079         ** C# 3.0 Type Inference (major bits are working)
2080         
2081         * anonymous.cs (AnonymousMethodExpression): Removed refactored fields.
2082         (.ImplicitStandardConversionExists): Uses compatible.
2083         (.ExplicitTypeInference): Infers type arguments based on explicit arguments
2084         (.InferReturnType): New method.
2085         (.Compatible): Refactored.
2086         (.ResolveParameters): Uses factory to create resolved parameters.
2087         (.CompatibleMethod): Add probing mode support.
2088         (AnonymousContainer): Removed unused fields. Split Define and Resolve to
2089         clearly distinguish between 2 different operations.
2090         (LambdaMethod): Moved to lambda.cs.
2091         (AnonymousMethod): Removed unused fields and methods.
2092         (AnonymousDelegate): Simplified.
2093         
2094         * codegen.cs (ResolveTopBlock): Updated renamed Resolve to Define.
2095         
2096         * convert. cs (ImplicitConversionStandard): Compatible works differently.
2097         
2098         * delegate.cs (Delegate): New mehods to reduce code duplication.
2099         (.GetConstructor): New method.
2100         (.GetInvokeMethod): New method.
2101         (DelegateCreation): Updated.
2102         
2103         * ecore.cs (ResolveOverloadExtensions): Don't crash when extension method
2104         does not exist.
2105         (OverloadResolve): Made probing little bit faster.
2106         
2107         * expression.cs (ParameterReference.DoResolveLValue): Reference can be null
2108         when probing is on.
2109         
2110         * generic.cs (TypeInferenceContext): Dummy implementation.
2111         
2112         * iterators.cs: Updated after Resolve/Define rename.
2113         
2114         * lambda.cs (LambdaExpression)
2115         (.ResolveParameters): Handles both type of arguments and type inference too.
2116         
2117         * parameter.cs (ImplicitLambdaParameter.Resolve): Sanity check.
2118         (InflateTypes): Updated.
2119         
2120         * support.cs (InflateTypes): Changed signature and updated.
2121         
2122         * typemanager.cs (LookupMemberCache): Better dynamic type check.
2123         (MemberLookup_FindMembers): More MS tricks.
2124         (GetParameterData): Ditto.
2125         (GetDelegateParameters): Uses quick path for dynamic types.
2126         
2127 2007-08-01  Marek Safar  <marek.safar@gmail.com>
2128
2129         * class.cs (MethodData.Define): EmitContext is required for generic stuff
2130         only.
2131
2132 2007-07-31  Marek Safar  <marek.safar@gmail.com>
2133
2134         * statement.cs (ProcessParameters): Don't crash when parameters have wrong
2135         syntax.
2136         
2137 2007-07-26  Jb Evain  <jbevain@novell.com>
2138
2139         * typemanager.cs (TypeManager.GetConstructor): Add a method overload
2140         which takes a boolean 'report_errors', similar to the GetMethod.
2141         (InitCodeHelpers): StructLayoutAttribute.ctor(int16) is not visible
2142         in .net 2.1, do not report errors here.
2143
2144         * typemanager.cs (TypeManager.InitCoreTypes): System.ArgIterator,
2145         System.Runtime.CompilerServices.RequiredAttributeAttribute and
2146         System.Runtime.CompilerServices.TypeForwardedToAttribute are internal
2147         in .net 2.1.
2148
2149         * typemanager.cs (TypeManager.InitCoreTypes): Move the resolution
2150         of the type InternalsVisibleToAttribute before the first call
2151         to CoreLookupType which is allowed to fail (third boolean parameter
2152         to true). Because, during the resolution for a type that is not
2153         immediately found, we try to check if the type is not defined in
2154         a friend assembly, and to do so, we need the
2155         InternalVisibleToAttribute.
2156
2157 2007-07-23  Miguel de Icaza  <miguel@novell.com>
2158
2159         * expression.cs (Binary): Add support for the brain-dead CSC 2.x
2160         feature that allows structs to be compared against null and inline
2161         the result as true or false.
2162
2163         Notice that the same code is not permitted inside a generic block
2164         of code that would do:
2165
2166         class Foo<T> where T : struct {
2167             bool Eval (T x)
2168             {
2169                  return x == null;
2170             }
2171         }
2172
2173         It is only allowed if the type of T is not bound (no where
2174         clause).   In my opinion, this CSC 2 behavior is broken but people
2175         seem to be using it (IronRuby does, a few bug reports on bugzilla
2176         have it and some people have complained about it).
2177
2178         All of the users that depend on this behavior have code that is
2179         very likely broken. 
2180         
2181         * report.cs (Warning, Error): make these take object arguments,
2182         not strings, as that allows us to take advantage of Format.
2183
2184 2007-07-20  William Holmes  <billholmes54@gmail.com>
2185
2186         * decl.cs: Changed MemberName.CountTypeArguments to also check the 
2187           Left member variable for the Count.
2188         * doc.cs: Changed DocUtil.GetMethodDocCommentName to call 
2189           MemberName.CountTypeArguments to avoid a NRE. 
2190
2191         This code is contributed under the MIT X11 license
2192
2193 2007-07-18  Marek Safar  <marek.safar@gmail.com>
2194
2195         * cs-tokenizer.cs: Improved lambda parsing and removed old code.
2196
2197 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
2198
2199         * doc.cs : generic method arguments are written as ``x while generic
2200           type arguments are `x. Combined with the previous change, fixed bug
2201           #79706.
2202
2203 2007-07-18  Raja R Harinath  <rharinath@novell.com>
2204
2205         Fix #82120
2206         * expression.cs (Binary.ResolveOperator): When converting
2207         'a + (- b)' to 'a - b', ensure that the unary '-' is discarded.
2208
2209 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
2210
2211         * doc.cs : when T: or whatever x: is specified, it does not really
2212           check the doc comment's syntax correctness. Fixed bug #82006.
2213
2214 2007-07-18  Marek Safar  <marek.safar@gmail.com>
2215
2216         * anonymous.cs (AnonymouseMethodExpression): Refactored to work with
2217         LambdaExpression better.
2218         
2219         * cs-tokenizer.cs: Changed a way how we detect lambda parameters.
2220         
2221         * driver.cs (LambdaTypeParseTest): Removed, tested method is gone.
2222         
2223         * ecore.cs (Expression.MemberLookupFailed): Don't show currect context
2224         as it can be generated.
2225         
2226         * expression.cs (Invocation.Error_InvalidArguments): Show correct
2227         modifiers.
2228         
2229         * lambda.cs (LambdaExpression): Refactored to share same code with
2230         AnonymousMethodExpression.
2231         
2232 2007-07-17  Marek Safar  <marek.safar@gmail.com>
2233
2234         * anonymous.cs (MakeName): Include host name for easier debugging.
2235         (LambdaMethod): New class for lambda spcecific stuff.
2236         
2237         * attribute.cs: Set EmitContext return type.
2238
2239         * class.cs: Set EmitContext return type.
2240         
2241         * codegen.cs (EmitContext): Return type cannot be null to stop messing
2242         with null/void meaning.
2243         
2244         * iterators.cs (ContainerType): Implemented.
2245         
2246         * rootcontext.cs: Set value of TypeManager.bool_type at early stage.
2247         
2248         * statement.cs (Return): Updated to lambda expressions.
2249         (Block.CloneTo): Parent can be null.
2250                 
2251 2007-07-13  Marek Safar  <marek.safar@gmail.com>
2252
2253         A fix for bug #81917
2254         * attribute.cs (AttributeTester.GetFixedBuffer): More robust testing.
2255         
2256         * class.cs (FixedField): Check whether field is in unsafe scope.
2257
2258         * ecore.cs (FieldExpr.DoResolve): Create fixed buffer expression here.
2259         (FieldExpr.Emit): Fixed buffers cannot be volatile.
2260
2261         * expression.cs (ElementAccess.Resolve): Move fixed buffers resolve to
2262         FieldExpr.
2263         
2264         * statement.cs (Fixed.Resolve): Simplified fixed buffers.
2265                 
2266 2007-07-13  Marek Safar  <marek.safar@gmail.com>
2267
2268         * cs-tokenizer.cs, class.cs, decl.cs, driver.cs, namespace.cs,
2269         rootcontext.cs, expression.cs, statement.cs: Updated to use WarningLevel
2270         from Report class.
2271
2272 2007-07-13  Marek Safar  <marek.safar@gmail.com>
2273
2274         * ecore.cs (FieldExpr.AddressOf): Less confusing warning message.
2275         
2276 2007-07-13  Marek Safar  <marek.safar@gmail.com>
2277
2278         * anonymous.cs (AnonymousMethodExpression): Parameters are r/o.
2279         (AnonymousContainer.ResolveNoDefine): Another ec to aec flag conversion.
2280         
2281         * codegen.cs(EmitContext): Add ProbingMode flag.
2282         
2283         * delegate.cs (DelegateInvocation): Set few instance variables as r/o.
2284         
2285         * driver.cs: For now set both warning values.
2286         
2287         * ecore.cs (SimpleName): Name is readonly.
2288         (MethodGroup.OverloadResolve): One quick path for probing.
2289         
2290         * expression.cs (Unary): Set Oper r/o.
2291         (Binary): Set Oper r/o.
2292         (ParameterReference): Set few instance variables as r/o.
2293         (ParameterReference.DoResolveBase): Don't capture aruments when 
2294         the probing is on.
2295         (Invocation.CloneTo): Fixed typo, looks easy, yeah.
2296         (Arglist): arguments are private.
2297         (SizeOf): type is private and r/o.
2298         (MemberAccess): arguments are private.
2299
2300         * report.cs: Enhanced reporting on/off capabilities.
2301         
2302         * lambda.cs: Uses ec.IsInProbingMode.
2303         (ContextualReturn): Derives from return.
2304         
2305         * rootcontext.cs: For now set both warning values.
2306         
2307         * statement.cs (CloneContext.RemapBlockCopy): Remaps block to cloned
2308         copy if one exists.
2309         (Return.Resolve): Don't die immediately.
2310         (Block.Resolve): Speed-up probing.
2311         (Block.CloneTo): Clone only child blocks.
2312
2313 Fri Jul 13 11:19:28 CEST 2007 Paolo Molaro <lupus@ximian.com>
2314
2315         * iterators.cs: reverted Miguel's latest change (r81925) as it
2316         breaks the build in System.
2317
2318 2007-07-13  Miguel de Icaza  <miguel@novell.com>
2319
2320         * iterators.cs (Yield.CheckContext): Check for the iterator type
2321         also here as we can call into Yield even in codepaths that are not
2322         directly checked by
2323         (MethodOrOperator is the only path that was checked).
2324
2325         In addition to the standard check, use a more specific check for
2326         constructors to report a more verbose error. 
2327
2328 2007-07-12  Miguel de Icaza  <miguel@novell.com>
2329
2330         * ecore.cs (FieldExpr.AddressOf): Do not stop processing here,
2331         report the warning and continue 
2332
2333         * statement.cs (Using.EmitLocalVariableDecls): We were leaving
2334         values on the stack on the call to Emit.   Use EmitStatement if
2335         possible, or using Emit + Pop if not possible.   Fixes #82064
2336
2337 2007-07-12  Raja R Harinath  <rharinath@novell.com>
2338
2339         * expression.cs (Invocation.IsApplicable): Reorganize slightly to
2340         avoid try...finally in some cases.
2341
2342 2007-07-10  Marek Safar  <marek.safar@gmail.com>
2343
2344         * attribute.cs (Attribute.ResolveConstructor): Uses method group.
2345         
2346         * class.cs (ConstructorInitializer.Resolve): Use and keep method group
2347         instead of method. Re-use standard error handling.
2348         (ConstructorInitializer.Emit): Simplified.
2349         
2350         * delegate.cs: Updated after Invocation.EmitCall change.
2351         
2352         * ecore.cs (GetOperatorTrueOrFalse): Uses MethodGroupExpr only.
2353         (SimpleName.SimpleNameResolve): Set and reset in_transit flag correctly.
2354         (ExtensionMethodGroupExpr): Refactored to use same OverloadResolve
2355         method and don't permanently changing input arguments.
2356         (MethodGroupExpr): Introduced resolved best_candidate, when method group
2357         is resolved it has one of the candidates is the best one which is later
2358         used to emit. Removed a few unused method.
2359         (MethodGroupExpr.MakeUnionSet): Moved from Invocation, it belongs here.
2360
2361         * expression.cs (StaticCallExpr.MakeSimpleCall): Uses method group.
2362         (Binary.ResolveOperator): Ditto.
2363         (ConditionalLogicalOperator.DoResolve): Ditto.
2364         (Invocation): Uses method group.
2365         (Invocation.DoResolve): Simplified.
2366         (Invocation.EmitCall): Removed useless is_static.
2367         (Invocation.Emit): Delegate to method group.
2368         (Invocation.EmitStatement): Simplified.
2369         (New): Uses method group.
2370         (MemberAccess.DoResolve): Don't destroy original expression.
2371         
2372         * statement.cs (ForEach.Resolve): Use null for no method arguments.
2373         
2374 2007-07-04  Marek Safar  <marek.safar@gmail.com>
2375
2376         * ecore.cs (VarExpr.DoResolveLValue): More restriction checks.
2377         
2378         * anonymous.cs,
2379         * lambda.cs: Add custom error message type.
2380
2381 2007-07-03  Marek Safar  <marek.safar@gmail.com>
2382
2383         * lambda.cs: Simplified little bit.
2384         
2385         * parameter.cs: Introduced ImplicitLambdaParameter.
2386         (Parameters.CreateFullyResolved): New factory instead of ctor.
2387         
2388         * anonymous.cs,
2389         * class.cs,
2390         * delegate.cs: Updated parameter creation.
2391         
2392 2007-07-03  Marek Safar  <marek.safar@gmail.com>
2393
2394         *  ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
2395         arguments.
2396         
2397         * generic.cs: Synchronized with gmcs.
2398         
2399 2007-07-03  Marek Safar  <marek.safar@gmail.com>
2400
2401         * class.cs (Indexer): Check return type as soon as possible.
2402         
2403         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
2404         members too.
2405         
2406         * ecore.cs (VarExpr.DoResolveLValue): Set eclass value.
2407         
2408         * expression.cs (Invocation.Error_InvalidArguments): Show type only.
2409         
2410         * parameter.cs (Parameter): Use expression type when it is available.
2411         
2412         * support.cs (ReflectionParameters.ParameterDesc): Show an extension
2413         method modifier for the first parameter only.
2414
2415 2007-06-24  Marek Safar  <marek.safar@gmail.com>
2416
2417         A fix for bug #81938
2418         * typemanager.cs (ChangeType): Fixed couple of char conversions.
2419         
2420         * constant.cs: Tide up an exception message.
2421
2422 2007-06-22  Marek Safar  <marek.safar@gmail.com>
2423
2424         * ecore.cs (SimpleName.DoSimpleNameResolve): Better error reporting when
2425         an uninitialized variable is used.
2426         
2427         * expression.cs (LocalVariableReference.DoResolve): Ditto.
2428
2429 2007-06-22  Marek Safar  <marek.safar@gmail.com>
2430
2431         * ecore.cs (SimpleName.TypeOrNamespaceNotFound): Allow to override type
2432         not found error handling.
2433
2434         * expression.cs (ArrayCreation): Removed redundant fields and little bit
2435         simplified.
2436         (ArrayCreation.ResolveArrayElement): To be ready to customization.
2437         (ArrayCreation.DoResolve): Simplified.
2438         (ImplicitlyTypedArrayCreation.DoResolve): Implicitly typed arrays have
2439         its own resolve process.
2440         (ImplicitlyTypedArrayCreation.ResolveArrayElement): Conversion magic.
2441
2442 2007-06-20  Marek Safar  <marek.safar@gmail.com>
2443
2444         * namespace.cs (NamespaceEntry.Error_AmbiguousTypeReference): Print
2445         more error details.
2446         
2447 2007-06-20  Marek Safar  <marek.safar@gmail.com>
2448
2449         * cs-tokenizer.cs: Removed var related stuff.
2450         
2451         * ecore.cs (Expression.ResolveAsContextualType): Introduced new method.
2452         (VarExpr): Changed to derive from SimpleName. VarExpr now behaves as
2453         a type and a keyword at same time.
2454         
2455         * decl.cs (MembeName.GetTypeExpression): Create VarExpr when type name
2456         matches to "var".
2457         
2458         * expression.cs (ImplicitlyTypedArrayCreation): New empty class for
2459         implicitly typed arrays, more changes will follow.
2460         
2461         * statement.cs (LocalInfo.Resolve): Resolve type as contextual type.
2462         
2463 2007-06-19  Marek Safar  <marek.safar@gmail.com>
2464
2465         * ecore.cs (VarExpr): Removed Handled field.
2466         
2467         * statement.cs (Using.ResolveLocalVariableDecls): Refactored to use
2468         build-in assign functionality.
2469         (ForEach.Resolve): Removed all implicitly typed local variable code and
2470         simplified.
2471         (ArrayForeach.Resolve): Infer implicitly typed local variable here.
2472         (CollectionForeach.Resolve): Infer implicitly typed local variable here.
2473
2474 2007-06-18  Marek Safar  <marek.safar@gmail.com>
2475
2476         * assign.cs: Removed implicitly typed local variable check.
2477         
2478         * expression.cs (LocalVariableReference.DoResolve): Add check for self
2479         referencing implicitly typed local variable.
2480         (LocalVariableReference.DoResolveLValue): Infer implicitly typed local
2481         variable here.
2482         
2483         * statement.cs (Fixed): Removed unsupported implicitly typed local
2484         variable code.
2485
2486 2007-06-15  Marek Safar  <marek.safar@gmail.com>
2487
2488         * decl.cs (MemberName): Moved all Unbound stuff to parser.
2489
2490 2007-06-14  Marek Safar  <marek.safar@gmail.com>
2491
2492         A fix for bugs #81855 and #76274
2493         * attribute.cs (AttachTo): Always set owner for global attributes to
2494         prefined owner.
2495         
2496         * ecore.cs (Error_TypeDoesNotContainDefinition): A type location can be
2497         usefull too.
2498         
2499         * cs-parser.jay: Assembly and module attributes must precede all other
2500         elements except using clauses and extern alias declarations.
2501
2502 2007-06-13  Marek Safar  <marek.safar@gmail.com>
2503
2504         A fix for bug #81748
2505         * cs-tokenizer.cs,
2506         * expression.cs: More checks for non ISO-1 features.
2507
2508 2007-06-12  Marek Safar  <marek.safar@gmail.com>
2509
2510         A fix for bug #81807
2511         * statement.cs(Switch.TableSwitchEmit): Define null label when it's not
2512         present inside switch statement and it is required by nullable check.
2513
2514 2007-06-12  Marek Safar  <marek.safar@gmail.com>
2515
2516         A fix for bug #81840
2517         * ecore.cs (SimpleName.ResolveAsTypeStep): Look for non-generic type
2518         when type matching fails.
2519         
2520         * namespace.cs: Tiny error message change.
2521
2522 2007-06-12  Marek Safar  <marek.safar@gmail.com>
2523
2524         * decl.cs (CheckAbstractAndExtern): Moved to MemberCore for easier error
2525         reporting. Added automatic property check.
2526         
2527         * class.cs: Updated after CheckAbstractAndExtern relocation.
2528         (AEventPropertyAccessor.GetSignatureForError): Customized.
2529         
2530 2007-06-11  Marek Safar  <marek.safar@gmail.com>
2531
2532         * class.cs (DefineBaseTypes): Base type can be undefined.
2533         
2534         * ecore.cs (TypeLookup): Minor refactoring.
2535         (DoResolveAsTypeStep): Removed redundant check.
2536
2537         * namespace.cs (Lookup): Removed redundant check.
2538                 
2539         * rootcontext.cs (BootstrapCorlib_ResolveType): Uses normal 
2540         ResolveAsTypeTerminal step.
2541         (BootstrapCorlib_*): Simplified.
2542         (PopulateCoreType): Core types can be now external.
2543
2544 2007-06-07  Marek Safar  <marek.safar@gmail.com>
2545
2546         * anonymous.cs (VerifyExplicitParameterCompatibility): Add flag to do
2547          verification only.
2548          (InferTypeArguments): Infers anonymous expression type arguments.
2549          (Compatible): Split to Compatible and InferTypeArguments. 
2550         
2551         * lambda.cs: Updated.
2552
2553 2007-06-08  Marek Safar  <marek.safar@gmail.com>
2554
2555         * anonymous.cs (AnonymousContainer): Marked as compiler generated.
2556
2557 2007-06-07  Raja R Harinath  <harinath@gmail.com>
2558
2559         Fix #80477, cs0135-2.cs, cs0135-3.cs
2560         * statement.cs (ToplevelBlock.ProcessParameters): Add parameter
2561         names to the "known" variables list.
2562         (Block.CheckInvariantMeaningInBlock): Handle the fact the
2563         parameter names are also "known".
2564         (Block.CheckError136): Remove.
2565         (ExplicitBlock.CloneTo): New.  Set 'known_variables' in target to
2566         null.
2567
2568 2007-06-07  Marek Safar  <marek.safar@gmail.com>
2569
2570         * ecore.cs (MethodGroupExpr.OverloadResolve): Print full method definition.
2571
2572 2007-06-06  Marek Safar  <marek.safar@gmail.com>
2573
2574         * ecore.cs (SimpleName.Emit): Emitting unresolved simple name is
2575         internal error not an user error.
2576          
2577         * expression.cs (IsApplicable): Refactored to make debugging easier.
2578
2579         * support.cs: More tricks for non-mono runtimes.
2580         
2581         * typemanager.cs (CoreLookupType): Made public.
2582         (InitSystemCore): All linq specific stuff moved to linq.cs
2583
2584 2007-06-05  Marek Safar  <marek.safar@gmail.com>
2585
2586         * typemanager.cs (CSharpSignature): One more missing build-in types
2587         replacement.
2588         More tricks for non-mono runtime.
2589
2590 2007-06-05  Raja R Harinath  <harinath@gmail.com>
2591
2592         * statement.cs (Block.CheckError136_InParents): Remove.
2593         (Block.AddVariable): Use GetParameterInfo instead.
2594         (ToplevelBlock.ProcessArguments): Likewise.
2595
2596 2007-06-04  Raja R Harinath  <rharinath@novell.com>
2597
2598         * statement.cs (ToplevelBlock.CloneTo): New.  Copy over parameter
2599         information too.
2600         (ToplevelBlock.GetParameterInfo): Split out of ...
2601         (ToplevelBlock.GetParameterRefernce): ... this.
2602         (ToplevelBlock.ParameterMap): Remove.
2603         * expression.cs (ParameterReference): Update to use
2604         ToplevelParameterInfo.
2605
2606         * statement.cs (ToplevelBlock.ProcessParameters): Workaround some
2607         regression.
2608
2609         * flowanalysis.cs (FlowBranching.CheckOutParameters): Move ...
2610         * statement.cs (ToplevelBlock.CheckOutParameters): ... here.
2611
2612         * statement.cs (ToplevelBlock.ResolveMeta): Move CS0136 checks ...
2613         (ToplevelBlock.ProcessParameters) ... here.
2614         (ToplevelBlock..ctor): Invoke it.
2615
2616         * statement.cs (ToplevelBlock.ResolveMeta): Add sanity checks for
2617         new parameters.
2618
2619         * statement.cs (IKnownVariable): New interface.
2620         (LocalInfo): Implement it.
2621         (ToplevelParameterInfo): New class.
2622         (ExplicitBlock.AddKnownVariable): Use IKnownVariable.
2623         (ExplicitBlock.GetKnownVariable): Likewise.  Rename from
2624         GetKnownVariableInfo.
2625
2626 2007-06-03  Raja R Harinath  <harinath@gmail.com>
2627
2628         Partly speed up CS0136 error checks.
2629         * statement.cs (ExplicitBlock.GetKnownVariableInfo): Remove
2630         'recurse' parameter.
2631         (Block.DoCheckError136): Only check errors in parameters.  Move
2632         local variable checks ...
2633         (Block.AddVariable): ... here, and ...
2634         (ToplevelBlock.ResolveMeta): ... here.
2635
2636 2007-06-02  Raja R Harinath  <harinath@gmail.com>
2637
2638         * statement.cs (Block.IsChildOf): Remove.
2639
2640         * statement.cs (Statement.Clone): Move special case code ...
2641         (Block.CloneTo): ... here.
2642
2643 2007-05-29  Raja R Harinath  <rharinath@novell.com>
2644
2645         * statement.cs (ToplevelBlock.container): Remove field.  It's
2646         redundant with 'Parent'.
2647         (ToplevelBlock.ContainerBlock): Remove accessor.
2648         (ToplevelBlock..ctor): Update to changes.  Register anonymous
2649         child with parent here, ...
2650         * cs-parser.jay (end_anonymous): ... not here.  Don't modify
2651         current_block.
2652         (start_anonymous): Don't save current_block.
2653         (top_current_block): Remove.
2654
2655         * statement.cs (Block.Flags): Remove IsExplicit and IsToplevel flags.
2656         (Block.Resolve): Update to changes.
2657         (Block..ctor): Move setting of "correct" 'Toplevel'
2658         and 'Explicit' fields to ...
2659         (ExplicitBlock..ctor, ToplevelBlock..ctor): ... here.
2660
2661 2007-05-27  Raja R Harinath  <harinath@gmail.com>
2662
2663         Kill Block.Implicit
2664         * statement.cs (Block.Implicit): Remove.
2665         (Block): Update to changes.
2666         * flowanalysis.cs: Likewise.
2667
2668         Mildly speed up CheckInvariantMeaningInBlock
2669         * statement.cs (ExplicitBlock.AddKnownVariable): Move here from Block.
2670         Recursively call AddKnownVariable to all enclosing blocks.
2671         (ExplicitBlock.GetKnownVariableInfo): Move here from Block.
2672         Remove recursive calls.
2673         (Block): Update to changes.
2674
2675         New ExplicitBlock invariants
2676         * statement.cs (Block.Explicit): New field.  It points to the
2677         immediately enclosing non-implicit block.
2678         (Block..ctor): Maintain the invariant.
2679         * cs-parser.jay: Take advantage of invariant.
2680
2681         Introduce ExplicitBlock
2682         * statement.cs (ExplicitBlock): New.
2683         (ToplevelBlock): Derive from it.
2684         (Block.Flags.IsExplicit): Rename from '...Implicit' and invert
2685         sense of flag.
2686         (Block.Implicit): Update to changes.
2687         * cs-parser.jay: Update to changes.
2688
2689         Remove unused field
2690         * codegen.cs (EmitContext.IsLastStatement): Remove.
2691         * statement.cs (Block.DoEmit): Update to changes.
2692
2693 2007-05-25  Raja R Harinath  <rharinath@novell.com>
2694
2695         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
2696         modifying current_block directly.
2697
2698 2007-05-23  Scott Peterson  <lunchtimemama@gmail.com>
2699         
2700         * class.cs: Implemented automatic properties (C# 3.0)
2701           Thanks to Marek for the help.
2702
2703 2007-05-23  Raja R Harinath  <rharinath@novell.com>
2704
2705         * flowanalysis.cs (VariableInfo.SetAssigned): When noting a
2706         variable as assigned, note also that all its components are
2707         assigned too.
2708         (MyBitVector.SetRange): New.  Function to set multiple bits to true.
2709
2710 2007-05-19  Marek Safar  <marek.safar@gmail.com>
2711
2712         * anonymous.cs, class.cs: Emit Compiler generated attribute when
2713         member is marked as compiler generated.
2714         
2715         * decl.cs (MemberCore): Refactored ModFlags into property.
2716
2717         * modifiers.cs: Add new modifier (COMPILER_GENERATED).
2718         (Check): Check only accessibility modifiers.
2719
2720 2007-05-18  Raja R Harinath  <rharinath@novell.com>
2721
2722         Track all assignable slots in one bit array
2723         * statement.cs (ToplevelBlock.ParameterMap): Convert into array.
2724         (ToplevelBlock.ResolveMeta): Don't create a VariableMap.  Move
2725         logic from VariableMap constructor here.  Use the same 'offset'
2726         variable that's later used for computing offsets of local
2727         variables.
2728         * flowanalysis.cs (UsageVector.parameters): Remove.
2729         (UsageVector): Update to changes.
2730         (VariableMap): Remove.
2731
2732         Avoid creating ParameterMap in every block
2733         * statement.cs (Block.ParameterMap): Move ...
2734         (ToplevelBlock.ParameterMap): ... here.
2735         (ToplevelBlock.ResolveMeta): Create VariableMap for parameters
2736         only once.
2737         * flowanalysis.cs (FlowBranching.param_map): Remove.
2738         (FlowBranching.UsageVector): Update to changes.
2739         (FlowBranchingToplevel.CheckOutParameters): Likewise.
2740
2741         * statement.cs (Block.CloneTo): Clone Toplevel field too.
2742
2743         * expression.cs (ParameterReference): Distinguish between block
2744         where parameter was referenced and declared.
2745
2746 2007-05-18  Marek Safar  <marek.safar@gmail.com>
2747
2748         * flowanalysis.cs, statement.cs: Put back improved error handling.
2749
2750 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
2751         
2752         * assign.cs:
2753         * expression.cs:
2754           Imporved object and collection initialization (C# 3.0).
2755
2756 2007-05-15  Marek Safar  <marek.safar@gmail.com>
2757
2758         A fix for bug #81380
2759         * expression.cs (Is.DoResolve): Only value types have constant `is'
2760         behaviour.
2761
2762 2007-05-15  Raja R Harinath  <rharinath@novell.com>
2763
2764         * statement.cs (ToplevelBlock.child): Remove.
2765
2766 2007-05-15  Raja R Harinath  <harinath@gmail.com>
2767
2768         Rationalize ResolveMeta: refactoring
2769         (Block.ResolveMeta): Remove wrong or superfluous comments.  Carve
2770         out constant handling code into ...
2771         (Block.DoResolveConstants): ... this.
2772
2773         Rationalize ResolveMeta: kill local_map
2774         * statement.cs (Block.local_map, Block.LocalMap): Remove.
2775         (Block.AssignableSlots): New.
2776         (Block.ResolveMeta): Make protected.  Don't create a VariableMap
2777         for locals -- move code from VariableMap here.  Avoid unnecessary
2778         allocations.
2779         * flowanalysis.cs (FlowBranching.local_map): Remove.
2780         (FlowBranching..ctor): Use Block.AssignableSlots.
2781         (VariableMap): Remove unused constructors.
2782
2783 2007-05-11  Raja R Harinath  <rharinath@novell.com>
2784
2785         * Makefile [PROFILE=net_2_0_bootstrap]: Add special-case rules.
2786
2787 2007-05-11  Marek Safar  <marek.safar@gmail.com>
2788
2789         * typemanager.cs (IsFriendAssembly): Should not be called for building
2790         assembly.
2791
2792 2007-05-09  Marek Safar  <marek.safar@gmail.com>
2793
2794         * literal.cs (NullConstant): Print null in all cases.
2795         
2796         * expression.cs (Binary.ResolveOperator): Implemented delegate
2797          comparison based on C# 2.0 changes.
2798
2799 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
2800
2801         This code is contributed under the MIT X11 license
2802         
2803         The following enables support for several C# 3.0 language features:
2804         
2805         * cs-tokenizer.cs: Added support for the "var" keyword.
2806         
2807         * ecore.cs: Refactored TypeLookupExpression.DoResolveAsTypeStep().
2808           Added VarExpr class to facilitate type inferencing.
2809         
2810         * class.cs: Added IDictionary field AnonymousTypes to TypeContainer
2811           to support anonymous types.
2812         
2813         * assign.cs: Added support for type inferencing and initialization.
2814         
2815         * anonymous.cs: Added AnonymousClass class to enable anonymous types.
2816         
2817         * expression.cs: Added implicit array support to ArrayCreation.
2818           Added 5 types and 1 interface:
2819           
2820           IInitializable                Implementing classes can inject initializing
2821                                         statements after object instantiation.
2822           
2823           Initializer                   Stores data for object initialization.
2824           
2825           AnonymousType                 An expression for anonymous types.
2826           
2827           AnonymousTypeParameter        Stores data about an anonymous type's field.
2828           
2829           NewInitialize                 An expression for object initialization.
2830           
2831           CollectionInitialize          An expression for collection initialization.
2832         
2833         * statement.cs: Added "var" keyword support to the foreach, using, and fixed
2834           statements.
2835
2836 2007-05-06  Marek Safar  <marek.safar@gmail.com>
2837
2838         A fix for bug #81500
2839         * cs-tokenizer.cs: Add special handling for coalescing operator.
2840
2841 2007-05-06  Marek Safar  <marek.safar@gmail.com>
2842
2843         A fix for bug #81529
2844         * attribute.cs (GetAttributeUsage): AttributeUsage attribute inherits
2845         its value from base class until it is redefined.
2846
2847 2007-05-02  Raja R Harinath  <rharinath@novell.com>
2848
2849         Fix regression in cs0631-3.cs
2850         * cs-parser.jay (operator_declarator): Add opt_attributes to error
2851         fallback.  Make error fallback catch more cases.
2852
2853 2007-05-01  Miguel de Icaza  <miguel@novell.com>
2854
2855         * cs-parser.jay: Allow parameters in operator declarations to have
2856         attributes. 
2857
2858 2007-04-27  Miguel de Icaza  <miguel@novell.com>
2859
2860         * statement.cs (If.CloneTo): Only clone the FalseStatement if it
2861         exists. 
2862
2863         * lambda.cs (ContextualReturn.Resolve): An expression is valid
2864         inside the ContextualReturn, it does not have to be an
2865         ExpressionStatement. 
2866
2867 2007-04-24  Miguel de Icaza  <miguel@novell.com>
2868
2869         * lambda.cs (ContextualReturn.Resolve): if the return type is not
2870         set, set it.
2871
2872 2007-04-23  Miguel de Icaza  <miguel@novell.com>
2873
2874         * anonymous.cs (AnonymousContainer): split the virtual Resolve
2875         method in two methods: ResolveNoDefine and Resolve.
2876
2877         ResolveNoDefine will stop just after ResolveTopBlock has been
2878         called.   
2879
2880         Resolve will then continue by creating a method and issuing the
2881         call to method.Define ().
2882
2883         (AnonymousMethod): Split and implement the new Resolve and
2884         ResolveNoDefine as well.
2885
2886         * lambda.cs (LambdaExpression): Split the anonymous method
2887         resolution code into a separate routine (CoreCompatibilityTest)
2888         from DoCompatibleTest.
2889
2890         (LambdaExpression.TryBuild): New method, this method tries to
2891         build the LambdaExpression with the given set of types to be used
2892         as the types for the various parameters of the lambda expression. 
2893
2894         If the compilation succeed with the given types, the infered type
2895         of the Anonymous method is returned, otherwise null is returned.
2896
2897 2007-04-23  Marek Safar  <marek.safar@gmail.com>
2898
2899         A fix for bug #81414
2900         * delegate.cs: Better fix, moved ApplyAttributes from Define to Emit.
2901
2902 2007-04-22  Miguel de Icaza  <miguel@novell.com>
2903
2904         * cs-tokenizer.cs: Change various identifiers here from the
2905         camelCasing to the recommended Linux-like style for instance
2906         variables from the Coding Guidelines. 
2907
2908 2007-04-19  Martin Baulig  <martin@ximian.com>
2909
2910         * convert.cs
2911         (Convert.ImplicitReferenceConversionCore): Allow conversions from
2912         System.Enum to System.ValueType.
2913
2914 2007-04-13  Martin Baulig  <martin@ximian.com>
2915
2916         Rewrote implicit reference conversions.  We need to distinguish
2917         between implicit reference conversions (13.1.4) and implicit
2918         boxing conversions (13.1.5).
2919
2920         According to the spec, there's an an implicit conversion
2921         "From a one-dimensional array-type S[] to IList<T> and base
2922         interfaces of this interface, provided there is an implicit
2923         reference conversion from S to T."  Note that this does not
2924         include boxing conversions.
2925
2926         * convert.cs
2927         (Convert.ImplicitTypeParameterBoxingConversion): New method.
2928         (Convert.ImplicitReferenceConversion): Split into
2929         ImplicitReferenceConversionCore() and
2930         ImplicitBoxingConversionExist().
2931         (Convert.ImplicitReferenceConversionExists): Use the new
2932         ImplicitReferenceConversionCore() and ImplicitBoxingConversionExists().
2933
2934 2007-04-12  Martin Baulig  <martin@ximian.com>
2935
2936         * convert.cs (Convert.ImplicitReferenceConversion): Move the
2937         `TypeManager.null_type' checks up to the top of the method.
2938
2939 2007-04-11  Marek Safar  <marek.safar@gmail.com>
2940
2941         A fix for bug #81350
2942         * class.cs, decl.cs, ecore.cs, namespace.cs: The optimization for private
2943         extension methods.
2944
2945 2007-04-11  Martin Baulig  <martin@ximian.com>
2946
2947         * statement.cs (Foreach.CollectionForeach.ProbeCollectionType):
2948         Use `TypeManager.GetInterfaces(t)' rather than `t.GetInterfaces()'
2949         to make this work for generic classes; fixes #79561.
2950
2951 2007-04-11  Martin Baulig  <martin@ximian.com>
2952
2953         * expression.cs (As): Add support for nullable types; fixes #79371.
2954
2955 2007-04-11  Martin Baulig  <martin@ximian.com>
2956
2957         * doc.cs (DocUtil.GetSignatureForDoc): Don't crash if
2958         `type.FullName' is null; fixes #80243.
2959
2960 2007-04-11  Martin Baulig  <martin@ximian.com>
2961
2962         * expression.cs (Invocation.IsApplicable): Don't modify the method
2963         if type inference succeeded, but the method was not applicable.
2964         Fixes #81250.
2965
2966 2007-04-10  Marek Safar  <marek.safar@gmail.com>
2967
2968         A fix for bug #81324
2969         * namespace.cs (Namespace.LookupExtensionMethod): Always inspect both
2970         internal and external namespaces containers.
2971
2972 2007-04-10  Martin Baulig  <martin@ximian.com>
2973
2974         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Use
2975         TypeManager.DropGenericMethodArguments() so we also call
2976         IMethodData.SetMemberIsUsed() for generic methods.  Fixes #80357.
2977
2978 2007-04-10  Martin Baulig  <martin@ximian.com>
2979
2980         * iterators.cs (Iterator.CreateIterator): Don't crash if
2981         `method.ReturnType' is null.  This happens if something went wrong
2982         while resolving that typ (we already reported an error in this case).
2983
2984 2007-04-10  Martin Baulig  <martin@ximian.com>
2985
2986         * expression.cs (New.DoResolve): Don't call CheckComImport() on
2987         generic interfaces; report the CS0144 directly.
2988
2989 2007-04-10  Martin Baulig  <martin@ximian.com>
2990
2991         * ecore.cs (MemberExpr.ResolveMemberExpr): If `left' is a
2992         `TypeExpr', call ResolveAsTypeTerminal() on it; fixes #81180.
2993
2994 2007-04-10  Martin Baulig  <martin@ximian.com>
2995
2996         * expression.cs (New.DoEmitTypeParameter): Fix #81109.
2997
2998 2007-04-09  Raja R Harinath  <rharinath@novell.com>
2999
3000         A better fix
3001         * flowanalysis.cs (UsageVector.MergeChild): Handle child.Block == null.
3002         * statement.cs: Use KillFlowBranching only in ResolveUnreachable.
3003
3004         Fix #81338
3005         * statement.cs (For.Resolve): If resolution fails, use
3006         KillFlowBranching.
3007
3008 2007-04-08  Marek Safar  <marek.safar@gmail.com>
3009
3010         * anonymous.cs (MakeName): Make faster and zero-based.
3011         (VerifyExplicitParameterCompatibility): Back to mode where generic
3012         parameter is ignored.
3013         (AnonymousMethodMethod.Emit): Decorate method as compiler generated.
3014
3015         * class.cs (EmitType): Method can emit another new method.
3016
3017         * cs-tokenizer.cs (IsLinqEnabled): Fixes static cctor race.
3018
3019         * driver.cs: Updated.
3020
3021         * lambda.cs: Reuse predefined empty parameters.
3022
3023         * parameter.cs: Updated
3024
3025         * support.cs: Implemented InflateTypes.
3026
3027         * typemanager.cs (GetFullName): Don't use FullName as it can be null.
3028         (InitSystemCore): Introduced to isolate 3.0 dependencies.
3029
3030 2007-04-03  Martin Baulig  <martin@ximian.com>
3031
3032         Fix #80632.
3033
3034         * statement.cs (Foreach.CollectionForeach.TryType): Use a custom
3035         version of TypeManager.IsOverride() which also works with generic
3036         types.  
3037
3038 2007-04-03  Martin Baulig  <martin@ximian.com>
3039
3040         Fix #81044.
3041
3042         * convert.cs
3043         (Convert.ExplicitReferenceConversion): We need to cast when
3044         converting from IList<T> to S[].
3045
3046 2007-04-01  Marek Safar  <marek.safar@gmail.com>
3047
3048         * decl.cs (FindExtensionMethods): Consider all candidates with same name
3049         at this level.
3050         
3051         * expression.cs (MemberAccess.DoResolve): Cache resolved expression.
3052
3053 2007-03-31  Marek Safar  <marek.safar@gmail.com>
3054
3055         * anonymous.cs (AnonymousMethodExpression.Compatible): Handles both
3056         argument and return type inferring.
3057
3058         * codegen.cs (InferReturnType): Flag whether return can be inferred.
3059         (ReturnType): Turned to property.
3060
3061         * statement.cs (Return): Implemented return type inferring.
3062
3063         * support.cs (ReflectionParameters): Use local types if possible.
3064
3065 2007-03-30  Raja R Harinath  <rharinath@novell.com>
3066
3067         * flowanalysis.cs (FlowBranching.Reachability): Remove.
3068         (FlowBranching.UsageVector): Update to changes.
3069
3070         Prepare to kill 'Reachability'
3071         * flowanalysis.cs (UsageVector): Remove 'Reachability' from
3072         argument of constructor.
3073
3074 2007-03-29  Raja R Harinath  <rharinath@novell.com>
3075
3076         Prepare to kill 'Reachability'
3077         * flowanalysis.cs (UsageVector.is_unreachable): New.
3078         (UsageVector): Update to maintain 'is_unreachable' in parallel to
3079         'reachability', and verify they're consistent.
3080
3081         Fix #81121
3082         * expression.cs (New.EmitStatement): Handle type parameters here too.
3083
3084 2007-03-29  Martin Baulig  <martin@ximian.com>
3085
3086         Fix #79148.
3087
3088         * anonymous.cs
3089         (ScopeInfo.ctor): Use `Modifiers.PUBLIC' if we're a nested
3090         CompilerGeneratedClass.
3091         (ScopeInfo.EmitScopeInstance): Make this protected.
3092         (CapturedVariable.EmitInstance): Use `Ldarg_0' if
3093         `ec.CurrentAnonymousMethod.Scope == Scope'.
3094
3095         * statement.cs (Block.ScopeInfo): Make this a property.
3096
3097 2007-03-27  Raja R Harinath  <harinath@gmail.com>
3098
3099         Prepare to kill 'Reachability'
3100         * flowanalysis.cs (FlowBranching.Reachability): Make class private.
3101         (FlowBranching.UsageVector.Reachability): Remove property.
3102         (FlowBranching.UsageVector.IsUnreachable): New property.
3103         (FlowBranching.UsageVector.ResetBarrier): New.
3104         (FlowBranching.UsageVector, FlowBranchingLabeled): Update to changes.
3105         * codegen.cs, statement.cs: Update to changes.
3106
3107 2007-03-27  Martin Baulig  <martin@ximian.com>
3108
3109         Fix #81209.
3110
3111         * decl.cs
3112         (DeclSpace.LookupNestedTypeInHierarchy): Correctly handle nested
3113         generic types.
3114
3115 2007-03-26  Raja R Harinath  <rharinath@novell.com>
3116
3117         * flowanalysis.cs (FlowBranching.Reachability): Use a boolean
3118         instead of TriState.  Remove all mention of TriState.
3119
3120         * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
3121         replaced by a boolean.  Add boolean 'is_unreachable' field, check
3122         and maintain invariants.
3123
3124 2007-03-25  Marek Safar  <marek.safar@gmail.com>
3125
3126         * anonymous.cs: Restored checks disabled for uninflated anonymous methods.
3127
3128 2007-03-25  Marek Safar  <marek.safar@gmail.com>
3129
3130         * expression.cs: Stop using obsolete 2.0 opcodes.
3131
3132 2007-03-25  Marek Safar  <marek.safar@gmail.com>
3133
3134         * enum.cs (EnumMember.Define): Fixed regression and slowdown caused by
3135         one of the latests Martin's fixes.
3136
3137 2007-03-23  Miguel de Icaza  <miguel@novell.com>
3138
3139         * expression.cs: On BigEndian systems, swap the bytes, temporary
3140         solution until we get a new bitconverter class.
3141
3142 2007-03-23  Martin Baulig  <martin@ximian.com>
3143
3144         Fix #81158.
3145
3146         * decl.cs (MemberCache.AddMembers): Add generic methods both as
3147         "Method" and "Method`1".  Normally, a cache lookup is done on the
3148         "Method" form (ie. without the generic arity), but this one makes
3149         lookups on the full form work as well.
3150
3151 2007-03-22  Raja R Harinath  <rharinath@novell.com>
3152
3153         * flowanalysis.cs (Reachability): Reorganize slightly, and remove
3154         unused properties.
3155
3156 2007-03-20  Bill Holmes  <billholmes54@gmail.com>
3157         * class.cs: 
3158         Added 2 MemberCoreArrayList objects, ordered_explicit_member_list and
3159         ordered_member_list, to TypeBuilder to store members to be defined
3160         in the order they were parsed in.
3161         - ordered_explicit_member_list contains all properties indexers
3162           and methods that are defined as explicit implementation of an
3163           interface or base class.
3164         - ordered_member_list contains all properties indexers and methods
3165           that are not defined as explicit implementation of an interface
3166           or base class.
3167
3168         Removed MethodArrayList and IndexerArrayList from TypeBuilder.  The 
3169         functionality in these removed classes has been replaced with 
3170         ComputeIndexerName, EmitIndexerName, HasEqualss, HasGetHashCode, and 
3171         CheckEqualsAndGetHashCode members defined and called in the TypeBuilderClass.
3172
3173         Adding CheckForDuplications to PropertyBase.PropertyMethod and calls
3174         to CheckForDuplications inside GetMethod and SetMethod Define Method
3175         to handle method property and indexer name conflicts.
3176
3177         Fixes #79434
3178
3179         All code is contributed under the MIT/X11 license.
3180
3181 2007-03-20  Martin Baulig  <martin@ximian.com>
3182
3183         * class.cs (TypeContainer.Interfaces): Removed; they're now
3184         included in `TypeContainer.Types'.
3185
3186 2007-03-20  Martin Baulig  <martin@ximian.com>
3187
3188         Fix #77963, #80314 and #81019.  Added gtest-317, ..., gtest-320.
3189
3190         * class.cs (TypeContainer.CreateType): New public method.  This is
3191         now called before DefineType() to create the TypeBuilders.
3192         (TypeContainer.DefineType): Don't create the TypeBuilder here; it
3193         has already been created by CreateType().
3194         (TypeContainer.DefineTypeBuilder): Renamed into CreateTypeBuilder();
3195         don't resolve our base classes here; this has been moved into
3196         DefineBaseTypes().  We're now called from CreateType().
3197         (TypeContainer.DefineBaseTypes): New private method; resolve our
3198         base classes here.  We're now called from DefineType().
3199
3200         * rootcontext.cs
3201         (RootContext.ResolveTree): Call TypeContainer.CreateType() on all
3202         our types first to create all the TypeBuilders.  After that, call
3203         TypeContainer.DefineType() on all the types which'll resolve their
3204         base classes and setup the resolve order.
3205
3206 2007-03-20  Martin Baulig  <martin@ximian.com>
3207
3208         * class.cs (TypeContainer.Enums): Removed; they're now included in
3209         `TypeContainer.Types'.  
3210
3211 2007-03-20  Martin Baulig  <martin@ximian.com>
3212
3213         * class.cs
3214         (TypeContainer.DefineType): Don't call ResolveMembers() here.
3215         (TypeContainer.DoResolveMembers): Call DefineType() on our
3216         `compiler_generated' classes; moved here from DefineNestedTypes().
3217
3218         * rootcontext.cs
3219         (RootContext.ResolveTree): Call ResolveMembers() on all
3220         TypeContainer's in the `type_container_resolve_order'.
3221
3222 2007-03-19  Marek Safar  <marek.safar@gmail.com>
3223
3224         * class.cs: Use corlib to handle InternalMethodImplAttribute.
3225
3226 2007-03-17  Marek Safar  <marek.safar@gmail.com>
3227
3228         * class.cs (EventFieldAccessor.EmitMethod): Don't override existing
3229         implementation flags.
3230
3231 2007-03-17  Marek Safar  <marek.safar@gmail.com>
3232
3233         * class.cs: More optimizations for type parameters.
3234
3235 2007-03-15  Marek Safar  <marek.safar@gmail.com>
3236
3237         * anonymous.cs (AnomymousMethod): Can be now hosted in generic container.
3238
3239         * ecore.cs, parameter.cs: More common code for both corlibs.
3240
3241         * typemanager.cs (IsGenericMethod): Simplified.
3242
3243 2007-03-15  Raja R Harinath  <rharinath@novell.com>
3244
3245         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
3246         'returns'.
3247         * statement.cs, iterators.cs, lambda.cs: Update to changes.
3248
3249         * statement.cs (Lock.Resolve): Invoke 'ec.NeedReturnLabel'
3250         unconditionally.  Simplify explanation.
3251         (Try.Resolve, Using.Resolve): Likewise.
3252
3253 2007-03-15  Martin Baulig  <martin@ximian.com>
3254
3255         Fix #80731.
3256
3257         * decl.cs (DeclSpace): If we're a partial class, use our
3258         `PartialContainer's `TypeParameters' and `CurrentTypeParameters'.
3259
3260 2007-03-15  Raja R Harinath  <rharinath@novell.com>
3261
3262         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
3263         'throws'.
3264         (FlowBranching.UsageVector): Update to changes.
3265         (FlowBranching.MergeSiblings): Likewise.
3266         * statement.cs: Likewise.
3267
3268 2007-03-15  Martin Baulig  <martin@ximian.com>
3269
3270         Fix #79302.
3271
3272         * decl.cs
3273         (MemberCache): Added a special .ctor for type parameters.
3274
3275         * typemanager.cs
3276         (TypeManager.MemberLookup_FindMembers): `TypeParameter' now has a
3277         `MemberCache'.  
3278
3279 2007-03-09  Martin Baulig  <martin@ximian.com>
3280
3281         * enum.cs (Enum): Make this a TypeContainer.
3282         (EnumMember): Derive from `Const'.
3283
3284         * const.cs
3285         (Const.DoResolveValue): New protected virtual method; move most of
3286         the functionality of ResolveValue() here so we can override it in
3287         `EnumMember'.
3288         (Const.CreateConstantReference): Make this virtual.
3289
3290         * class.cs (Kind): Add `Kind.Enum'.
3291         (TypeContainer.Emit): Don't emit the enums here; they're already
3292         in the `RootContext.typecontainer_resolve_order'.
3293
3294         * rootcontext.cs (RootContext.EmitCode): Don't emit the enums
3295         here; they're already in the `typecontainer_resolve_order'.
3296
3297         * ecore.cs (EnumConstant.ConvertImplicitly): Add
3298         TypeManager.DropGenericTypeArguments().
3299
3300         * typemanager.cs
3301         (TypeManager.CSharpEnumValue): Add DropGenericTypeArguments().
3302         (TypeManager.IsEnumType): Likewise.
3303         (TypeManager.EnumToUnderlying): Likewise.
3304         (TypeManager.IsEqual): Add support for enums.
3305
3306 2007-03-12  Raja R Harinath  <rharinath@novell.com>
3307
3308         * typemanager.cs (InitCoreTypes) [NET_2_0]: Allow
3309         DefaultParameterValueAttribute to be undefined, say if System.dll
3310         is not referenced.
3311
3312 2007-03-11  Marek Safar  <marek.safar@gmail.com>
3313
3314         * ecore.cs, parameter.cs, typemanager.cs: Another gmcs fix to work with
3315         any mscorlib.
3316
3317 2007-03-10  Marek Safar  <marek.safar@gmail.com>
3318
3319         * class.cs, parameter.cs: Unified parameters verification.
3320
3321 2007-03-08  Martin Baulig  <martin@ximian.com>
3322
3323         * cs-parser.jay (constructor_header): Pass the location to the
3324         newly created TopLevelBlock.
3325
3326 2007-03-07  Martin Baulig  <martin@ximian.com>
3327
3328         * statement.cs (Block.Resolve): Don't crash on error; bug #80715.
3329
3330 2007-03-06  Miguel de Icaza  <miguel@novell.com>
3331
3332         * convert.cs (ExplicitReferenceConversionExists): Sync this method
3333         with the changes from David, fixes the build.
3334
3335 2007-03-05  David Mitchell  <dmitchell@logos.com>
3336
3337         * convert.cs: Implement From System.Collecitons.Generic.IList<T>
3338         and its base interfaces to a one-dimensional array type S[],
3339         provided there is an implicit or explicit reference conversion
3340         from S to T.
3341
3342 2007-03-03  Marek Safar  <marek.safar@gmail.com>
3343
3344         * cs-tokenizer.cs: Implemented basic linq grammar.
3345
3346         * driver.cs: Set linq lang version on demand.
3347
3348 2007-02-26  Marek Safar  <marek.safar@gmail.com>
3349
3350         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
3351
3352 2007-02-25  Marek Safar  <marek.safar@gmail.com>
3353
3354         * attribute.cs: Replaced DefinePInvoke in favor of S.R.E implementation
3355         (Fixes #80455)
3356
3357         * class.cs (InterfaceMemberBase): Share common `extern' modifier checks
3358         here.
3359         Check property and event extern attributes.
3360
3361         * codegen.cs (ModuleClass): HasDefaultCharSet when module defined global
3362         charset.
3363
3364 2007-02-24  Marek Safar  <marek.safar@gmail.com>
3365
3366         A fix for bug #80407
3367         * ecore.cs: Don't report ambiguity error when methods have same parent.
3368
3369 2007-02-23  Marek Safar  <marek.safar@gmail.com>
3370
3371         A fix for bug #80878
3372         * class.cs, cs-parser.jay: Event property can host anonymous methods.
3373
3374 2007-02-22  Marek Safar  <marek.safar@gmail.com>
3375
3376         * attribute.cs: Enable ExtensionAttribute presence test.
3377
3378 2007-02-22  Marek Safar  <marek.safar@gmail.com>
3379
3380         * class.cs: Warn about missing GetHashCode only when Equals is override.
3381
3382         * decl.cs: Check accessibility of type arguments.
3383
3384         * typemanager.cs: Correctly report nullable array.
3385
3386 2007-02-20  Marek Safar  <marek.safar@gmail.com>
3387
3388         * class.cs, report.cs: Capture more details when things go wrong.
3389
3390 2007-02-20  Marek Safar  <marek.safar@gmail.com>
3391
3392         A fix for bug #80650
3393         * cs-parser.jay: Anonymous container starts at constructor declaration
3394         and not at block beginning because it has to be usable in constructor
3395         initializer.
3396
3397         * statement.cs: Use context location and not block one for error reporting.
3398
3399 2007-02-18  Marek Safar  <marek.safar@gmail.com>
3400
3401         A fix for bug #78712
3402         * class.cs.cs, decl.cs, ecore.cs: LookupAnyGeneric inspects nested types
3403         too.
3404
3405 2007-02-18  Marek Safar  <marek.safar@gmail.com>
3406
3407         A fix for bug #80493 by Atsushi Enomoto
3408         * cs-parser.jay: Ignore invalid attribute target.
3409
3410 2007-02-18  Marek Safar  <marek.safar@gmail.com>
3411  
3412         * cs-tokenizer.cs: Ignore '\0' as white space character.
3413
3414 2007-02-17  Miguel de Icaza  <miguel@novell.com>
3415
3416         * cs-parser.jay: Add support for lambda expressions to the mcs
3417         compiler as well.
3418
3419         * lambda.cs: Only clone when we are probing, not on the final call
3420         (Compatible is the final call). 
3421
3422         * statement.cs (CloneContext): Introduce class to provide block
3423         remapping during clone.
3424
3425         All statements Clone themselves now.
3426
3427         (Clone): special handling for blocks, when we clone a block, we
3428         register the block inside this routine, as children of the block
3429         might trigger a lookup. 
3430         
3431         * expression.cs: Add support for CloneContext in all expressions. 
3432         
3433 2007-02-17  Marek Safar  <marek.safar@gmail.com>
3434  
3435         A fix for bug #80493
3436         * statement.cs: Report ambiguous warning when interfaces are not related.
3437
3438 2007-02-15  Marek Safar  <marek.safar@gmail.com>
3439
3440         C# 3.0 extension methods.
3441
3442         * attribute.cs (Error_MisusedExtensionAttribute): Extension attribute
3443         cannot be used directly.
3444
3445         * class.cs (Class.Emit): Emit extension attribute if any class method
3446         is extension method.
3447         (Method.Define): Add basic extension method validation conditions.
3448         (Method.Emit): Emit extension attribute for method.
3449
3450         * codegen.cs (AssemblyClass): Emit extension attribute if at least one
3451         extension method exists. Currently we follow same approach as Microsoft
3452         does, emit even if a method or a class are private but this can change
3453         later.
3454
3455         * cs-parser.jay: Add handling of `this' keyword in method parameters
3456         context.
3457
3458         * decl.cs (DeclSpace.IsStaticClass): New property.
3459         (MemberCache.FindExtensionMethods): Looks for extension methods with
3460         defined name and extension type.
3461
3462         * doc.cs: Updated after OverloadResolve changes.
3463
3464         * driver.cs: Add new soft reference to System.Core.dll.
3465
3466         * ecore.cs (MethodLookup): Can return only MethodGroupExpr.
3467         (ExtensionMethodGroupExpr): Represents group of extension methods.
3468
3469         * expression.cs (Invocation): Moved methods BetterConversion, MoreSpecific,
3470         BetterFunction, IsOverride, IsAncestralType, OverloadResolve
3471         to MethodGroupExpr and made non-static for easier customization.
3472         (Invocation.DoResolve): Add extension method lookup when no standard
3473         method was found.
3474         (MemberAccess.DoResolve): Try extension methods if no member exists.
3475
3476         * modifiers.cs: Add METHOD_EXTENSION modifier.
3477
3478         * namespace.cs (RegisterExtensionMethodClass): Register class namespace
3479         as well as candidate extension type.
3480         (ComputeNamespaces): When assembly constains extension methods registers
3481         them.
3482         (Namespace.RegisterExternalExtensionMethodClass): Register type for later
3483         extension method lookup.
3484         (Namespace.LookupExtensionMethod): Looks for extension method in this
3485         namespace.
3486         (NamespaceEntry.LookupExtensionMethod): Does extension methods lookup to
3487         find a method which matches name and extensionType.
3488
3489         * parameter.cs (Parameter): Add This modifer.
3490         (HasExtensionMethodModifier): New property.
3491         (Resolve): Add extension parameter check.
3492         (ModFlags): turned to property to exclude this modifier as it is not real
3493         parameter modifier.
3494         (Parameters): Implemented ExtensionMethodType and HasExtensionMethodType.
3495
3496         * support.cs (ParameterData): Add ExtensionMethodType.
3497         (ReflectionParameters): Implemented ExtensionMethodType interface property.
3498
3499         * typemanager.cs: Add type and ctor extension attribute type.
3500
3501 2007-02-15  Miguel de Icaza  <miguel@novell.com>
3502
3503         * report.cs (DisableErrors, EnableErrors): used to prevent error
3504         output when we are "trying" to compile various methods with
3505         different types. 
3506
3507         * ecore.cs (Expression): Add Clone method that calls the virtual
3508         CloneTo method.  The current CloneTo method in Expression throws
3509         an exception so we can track down all the places where this must
3510         be implemented (not using abstract, because that would be a lot of
3511         up-front-work before we can start testing the implementation
3512         idea). 
3513
3514         Important: we only need Clone capabilities for expressions created
3515         by the parser, as the expressions we will be cloning are
3516         expressions in the pre-resolved state.   This vastly simplifies
3517         the work required. 
3518         
3519         (SimpleName): Add CloneTo that does nothing.
3520         (EmptyCast): Add CloneTo.
3521         
3522         * expression.cs (Binary): Implement CloneTo.
3523         (Invocation.IsApplicable): Store the current ec in
3524         EmitContext.TempEc and restore it on return.  This is used so we
3525         do not have to sprinkle hundres of methods with an extra
3526         EmitContext, we know that the only user is the lambda expression
3527         ImplicitConversionExists code. 
3528         
3529         (Argument): Add Cloning capabilities.
3530         (LocalVariableReference, ParenthesizedExpression, Unary, Probe,
3531         Cast, Conditional, ArrayCreation, InvocationOrCast, Invocation,
3532         ArglistAccess, ArgList, TypeOf, SizeOf, CheckedExpr,
3533         UnCheckedExpr, ElementAccess, BaseAccess, BaseIndexerAccess,
3534         IndexerAccess): Add Clone capability.
3535
3536         (LocalVariableReference, This): TODO: needs cloned Block mapping.
3537
3538         (Argument): Add cloning capability.
3539
3540         * assign.cs (Assign): Implement CloneTo.
3541
3542         * anonymous.cs (ImplicitStandardConversionExists): Make virtual.
3543         
3544         * lambda.cs (ImplicitStandardConversionExists): Implement lambda
3545         version by calling Convert with the EmitContext (that we are
3546         currently storing in ec, this is not great, but will do for now,
3547         to avoid passing EmitContext parameters to hundreds of functions
3548         that do not need them now).
3549
3550         (SetExpression): Remove, it is not needed.
3551         
3552         (ContextualReturn): Implement CloneTo.
3553
3554         * statement.cs (Statement): Implement cloning infrastructure,
3555         similar to expressions.
3556
3557         (Block): Partial implementation of Clone for statements.
3558
3559         (Return): Implement clone.
3560         
3561         * constant.cs (Constant.CloneTo): New method, does nothing.
3562
3563         * codegen.cs (TempEc): Add a static EmitContext as a temporary
3564         solution, until we decide how to exactly do this.  
3565         
3566 2007-02-14  Marek Safar  <marek.safar@gmail.com>
3567  
3568         A fix for bug #80493
3569         * class.cs (FindOutBaseMethod): When the base accessor does not exist and
3570         a property is override we need to use second accessor.
3571
3572 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3573  
3574         A fix for bug #80418
3575         * attribute.cs, class.cs: Use correct calling conventions for pinvoke
3576         methods.
3577
3578 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3579
3580         Another fix for bug #80749
3581         * pending.cs: Abstract class has priority over interfaces.
3582
3583 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3584
3585         Another fix for bug #80749
3586         * pending.cs: Abstract class has priority over interfaces.
3587
3588 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3589
3590         Another fix for bug #80749
3591         * pending.cs: Abstract class has priority over interfaces.
3592
3593 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3594
3595         Another fix for bug #80749
3596         * pending.cs: Abstract class has priority over interfaces.
3597
3598 2007-02-13  Marek Safar  <marek.safar@gmail.com>
3599
3600         * class.cs Better error message.
3601
3602         * driver.cs: Add shorter versions of -optimize option.
3603
3604 2007-02-13  Martin Baulig  <martin@ximian.com>
3605
3606         * class.cs (Constructor.Emit): Check the return value of
3607         ec.ResolveTopBlock() and return on error.
3608
3609 2007-02-13  Raja R Harinath  <rharinath@novell.com>
3610
3611         * ecore.cs (Error_InvalidExpressionStatement): Add a comma to error
3612         message to fix error message regression.
3613
3614 2007-02-12  Marek Safar  <marek.safar@gmail.com>
3615
3616         * delegate.cs: Delegate creation expression cannot be of Nullable type.
3617
3618 2007-02-12  Marek Safar  <marek.safar@gmail.com>
3619
3620         A fix for bug #80749
3621         * assign.cs (FieldInitializer): FieldInitializer has to keep track of
3622         its parent container.
3623
3624         * class.cs (DefineFieldInitializers): Each initializer can has different
3625         resolve context.
3626
3627         * const.cs: Updated.
3628
3629 2007-02-11  Miguel de Icaza  <miguel@novell.com>
3630
3631         * lambda.cs (LambdaExpression.Compatible): Remove some early code,
3632         now all the heavy lifting to check that embedded statements or
3633         expressions have the right form is done in the ContextualReturn.
3634
3635         (ContextualReturn): New class.  
3636
3637         * ecore.cs (Error_InvalidExpressionStatement): Make a helper
3638         method that can be invoked to report 201, so we do not replicate
3639         this everywhere.
3640
3641         * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
3642         
3643         * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
3644         treating tabs as spaces. 
3645
3646 2007-02-09  Marek Safar  <marek.safar@gmail.com>
3647
3648         A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
3649         * assign.cs: Use full implicit conversion for right side check.
3650
3651 2007-02-09  Marek Safar  <marek.safar@gmail.com>
3652
3653         * statement.cs (Switch): Switch over boolean type is not standardized.
3654
3655 2007-02-08  Marek Safar  <marek.safar@gmail.com>
3656
3657         A fix for bug #80755
3658         * decl.cs (FindBaseEvent): Don't use method cache for events.
3659
3660 2007-02-07  Marek Safar  <marek.safar@gmail.com>
3661
3662         * cs-parser.jay: Better syntax error handling.
3663
3664         * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
3665         instead of underlying type value.
3666
3667 2007-02-06  Marek Safar  <marek.safar@gmail.com>
3668
3669         * driver.cs: Check define identifier before is registered.
3670
3671         * namespace.cs: Use existing error message.
3672
3673         * report.cs: New warning.
3674
3675 2007-02-06  Marek Safar  <marek.safar@gmail.com>
3676
3677         A fix for bug #80742
3678         * expression.cs: Delegate Invoke method can be called directly.
3679
3680 2007-02-06  Marek Safar  <marek.safar@gmail.com>
3681
3682         A fix for bug #80676
3683         * class.cs (IsEntryPoint): The Main method can have params modifier.
3684
3685 2007-02-04  Miguel de Icaza  <miguel@novell.com>
3686
3687         * parameter.cs (Parameter, Parameters): Add Clone method.
3688
3689         * anonymous.cs (Compatible): Turn method into virtual method, so
3690         LambdaExpression can implement a different behavior.
3691
3692         (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
3693         out the basic checking here, so it can be used by
3694         LambdaExpressions.
3695         
3696         * lambda.cs: Introduce "Compatible" function that will do the
3697         heavy lifting.
3698
3699 2007-02-02  Marek Safar  <marek.safar@gmail.com>
3700
3701         * attribute.cs: Unified one error message.
3702
3703         * class.cs (Class): Use type attributes and not properties to test static
3704         class.
3705         (IsEntryPoint): Don's pass local variable.
3706
3707         * convert.cs: Removed duplicate check.
3708
3709         * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
3710
3711         * driver.cs: Don't crash when soft reference does not exist.
3712
3713         * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
3714         (UsingEntry): Removed redundant allocation.
3715
3716         * parameter.cs: Add fast path for type parameters.
3717
3718         * support.cs: Don't allocate attribute when it's not used.
3719
3720 2007-01-30  Miguel de Icaza  <miguel@novell.com>
3721
3722         * anonymous.cs
3723         (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
3724         this into a virtual method, so we can override it in LambdaExpression.
3725
3726         * driver.cs: Improve diagnostics in case of failure. 
3727
3728         * cs-tokenizer.cs: Instead of trying to parse a type and a name,
3729         write a function that is slightly more complex and that parses:
3730
3731         type identifier [, type identifier]* )
3732
3733         The old function would return incorrectly a OPEN_PARENS_LAMBDA for
3734         this expression:
3735
3736                 (canEmpty ? i >= 0 : i > 0)
3737
3738 2007-01-30  Raja R Harinath  <rharinath@novell.com>
3739
3740         * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
3741         exception on possibly valid code.
3742
3743 2007-01-29  Raja R Harinath  <rharinath@novell.com>
3744
3745         * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
3746         Push/PopPosition.
3747         (parse_opt_type_arguments): Remove.  It's almost the same as
3748         parse_less_than.
3749         (parse_namespace_or_typename): Use parse_less_than.
3750
3751 2007-01-28  Miguel de Icaza  <miguel@novell.com>
3752
3753         * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
3754         this bug took a few hours to find, because the state saved and
3755         restored by PushPosition and PopPosition was ignoring the state of
3756         parse_generic_less_than.
3757
3758         I can also now remove the handling of OP_LT and OP_GT, this solves
3759         the big mistery.
3760         
3761         * cs-tokenizer.cs: store the location for the ARROW token, we use
3762         that in the parser.
3763
3764         (PushPosition, PopPosition): save/restore also `current_token',
3765         restore `parse_generic_less_than' (was missing).
3766
3767         (parse_opt_type_arguments): use parse_type, not
3768         parse_namespace_or_typename to parse types.
3769
3770         * lambda.cs: Empty new file, will eventually have the lambda
3771         expression implementation.
3772
3773         * lambda.test: used to test the internal tokenizer. 
3774
3775         * report.cs (FeatureIsNotISO1): Rename from
3776         FeatureIsNotStandardized, because it was about the language level
3777         (1 vs 2) it was not about standarization.
3778
3779         (FeatureRequiresLINQ): New.
3780
3781         * support.cs (SeekableStreamReader): Only require that the reader
3782         is a TextReader, not a StreamReader, so we can plug StringReader. 
3783
3784         * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
3785         given position in the input stream the following tokens can be
3786         parsed as a type followed by an identifier.
3787
3788         (is_punct): after a '(' if parse_type_and_parameter returns true,
3789         then return a special token OPEN_PARENS_LAMBDA which is used to
3790         avoid reduce/reduce errors in the grammar for the
3791         lambda_expression rules.
3792
3793         (parse_type): implement a type parser inside the
3794         tokenizer, the parser only returns true or false depending on
3795         whether the input at a given position can be parsed as a type.
3796
3797         (peek_token): new method used during type parsing.
3798
3799 2007-01-28  Raja R Harinath  <rharinath@novell.com>
3800
3801         Fix #80531
3802         * anonymous.cs (ScopeInfo.InflateParameters): New.
3803         (AnonymousContainer.Resolve): Use it to redirect types of
3804         delegate parameters.
3805
3806 2007-01-27  Raja R Harinath  <rharinath@novell.com>
3807
3808         Fix #80530
3809         * expression.cs (Error_InvalidArguments): Don't use two different
3810         messages for CS1503.  Use ExtraInformation and
3811         SymbolRelatedToPreviousError instead.
3812
3813         Fix #80358
3814         * decl.cs (DeclSpace.initialize_type_params): Don't access
3815         'type_params' of a partial class directly.
3816
3817 2007-01-26  Miguel de Icaza  <miguel@novell.com>
3818
3819         * constant.cs: Removed a handful of out-of-range checks that were
3820         not necessary. 
3821
3822 2007-01-25  Marek Safar  <marek.safar@gmail.com>
3823
3824         * expression.cs (CheckUselessComparison): Add additional check for char
3825         constants.
3826
3827         * namespace.cs: Fixed typo.
3828
3829 2007-01-23  Miguel de Icaza  <miguel@novell.com>
3830
3831         * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
3832         gone, instead we inline the test, preventing the needless casts to
3833         longs, ulongs and doubles for the parameters, avoiding calls to
3834         methods that overchecked stuff, and instead inlined things
3835         nicely. 
3836
3837 2007-01-20  Marek Safar  <marek.safar@gmail.com>
3838
3839         * cs-parser.jay: Better parameter error handling.
3840
3841 2007-01-17  Marek Safar  <marek.safar@gmail.com>
3842
3843         A fix for bug #80368, #80522
3844         * expression.cs (ArrayCreation.only_constant_initializers): Indicates
3845         whether array initializer contains constants only.
3846         (ArrayCreation.Emit): Use better formula to decide when
3847         are array initializers for static initialization.
3848         (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
3849         have to emit even constants otherwise they are pre-initialized.
3850
3851 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
3852             Raja R Harinath  <rharinath@novell.com>
3853
3854         Fix emit order of 'get' vs. 'set'.
3855         * support.cs (Accessors): New.
3856         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
3857         Note the order in which accessors are declared in the source.
3858         * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
3859         Refactored from Property.Define and Indexer.Define.
3860         (PropertyBase.DefineAccessors): New helper that calls the above in
3861         appropriate order as noted by the parser.
3862         (Property.Define, Indexer.Define): Update to changes.
3863         (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
3864
3865 2007-01-17  Raja R Harinath  <rharinath@novell.com>
3866
3867         Fix cs0029-6.cs and gcs0029-2.cs (regression)
3868         * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
3869         there's an implicit conversion from the current type to the target
3870         type before converting the underlying constant.
3871
3872 2007-01-16  Marek Safar  <marek.safar@gmail.com>
3873
3874         * const.cs (ResolveValue): Updated after constant conversion was made more
3875         generic.
3876
3877         * constant.cs (GetAttributableValue): constant to object conversion is
3878         used for attributes only.
3879         (IntConstant.ConvertImplicitly): Moved from convert to be used in all
3880         constant conversions.
3881         (LongConstant.ConvertImplicitly): Ditto.
3882
3883         * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
3884         (ImplicitConversionStandard): Handle constant conversion as extra step.
3885         It solves the issue when constant conversion was called indirectly like
3886         inside array initializer and constant folding was skipped.
3887
3888         * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
3889         this change.
3890
3891         * statement.cs(ImplicitConversionStandard): Updated after constant
3892         conversion was made more generic.
3893
3894 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
3895
3896         * expression.cs (As.DoResolve): Use GenericConstraints instead of
3897         Constraints, solves the problem where the compiler incorrectly
3898         reported that a type parameter was not constrained to a class (Bug
3899         80518)
3900
3901 2007-01-14  Marek Habersack  <grendello@gmail.com>
3902
3903         * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
3904
3905 2007-01-14  Marek Safar  <marek.safar@gmail.com>
3906
3907         A fix for bug #80368
3908         * assign.cs (FieldInitializer): New class implements field
3909         initializer statement.
3910
3911         * attribute.cs: Update after FieldMember rename.
3912
3913         * class.cs (PropertyBasedMember): New common class for property based
3914         types.
3915         (InterfaceMemberBase): New base class for all members which can be used as
3916         an interface members.
3917         (MethodCore): Moved really common code to InterfaceMemberBase.
3918         (Method.Define): Equal and GetHasCode detection is relevant for methods
3919         only.
3920         (MethodData.Define): Don't assume that public event implements an
3921         interface automatically.
3922         (MethodData.DefineMethodBuilder): Issue an error even if only extern
3923         modifier is used.
3924         (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
3925         (FieldMember): Merged with FieldBase.
3926         (EventProperty.AEventPropertyAccessor): New specialization to check whether
3927         event extern modifier can be used.
3928         (EventField.EventFieldAccessor): Moved event field specific code here.
3929         (Event.AllowedModifiers): Even event can be extern.
3930         (Event.FindOutBaseMethod): New override specific to events.
3931         (Indexer.parameters): Reintroduce parameters because base class holds
3932         only properties common data.
3933         (Indexer.CheckForDuplications): Indexers are threated as methods so we
3934         need do extra parameters check.
3935
3936         * const.cs: Update after FieldMember rename.
3937
3938         * decl.cs (MemberCache.FindBaseEvent): New method.
3939
3940         * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
3941         to reflect that indexer is now derived from PropertyBased.
3942
3943         * ecore.cs (GetMemberType): Made public.
3944         (EventExpr.ResolveMemberAccess): Use right event cache and checks for
3945         obsolete event.
3946
3947         * flowanalysis.cs, statement.cs: Update after FieldMember rename.
3948         
3949         * typemanager.cs (CSharpSignature): Correctly print event accessors.
3950         (RegisterEvent): Removed.
3951         (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
3952         (GetPrivateFieldOfEvent): Renamed to GetEventField.
3953
3954 2007-01-11  Raja R Harinath  <rharinath@novell.com>
3955
3956         Fix #80249
3957         * statement.cs (CollectionForeach.TryType): Prefer generic
3958         GetEnumerator over non-generic variant.  Fix code to follow comments.
3959
3960 2007-01-09  Raja R Harinath  <rharinath@novell.com>
3961
3962         Fix #80446
3963         * support.cs (ReflectionParameter): Don't use an invalid index on
3964         the generic parameter data.
3965
3966 2007-01-08  Miguel de Icaza  <miguel@novell.com>
3967
3968         * driver.cs: Just add a tiny bit of infrastructure.
3969
3970 2007-01-02  Marek Safar  <marek.safar@gmail.com>
3971
3972         * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
3973         where field type is struct from current assembly.
3974         
3975         * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
3976         it is possible.
3977
3978 2007-01-02  Marek Safar  <marek.safar@gmail.com>
3979
3980         A fix for bug #80381
3981         * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
3982         the core types.
3983
3984         * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
3985         messages.
3986         (Namespace.LookupType): Always use core types from corlib when speficied.
3987
3988         * report.cs: A new warning.
3989
3990         * rootcontext.cs (BootstrapCorlib_ResolveInterface,
3991         BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
3992         (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
3993
3994         * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
3995         (InitCoreTypes): Set expression type of object_type and value_type
3996         immediately after lookup.
3997
3998 2007-01-01  Miguel de Icaza  <miguel@novell.com>
3999
4000         * cs-tokenizer.cs: Accept Pc class characters (Connector
4001         Punctuation) as valid identifiers.  Fixes #78259
4002
4003         * expression.cs (Invocation.DoResolve): Moved the check for the
4004         use of `this' for doing method calls to the Invocation resolution
4005         step, after overload resolution has taken place instead of doing
4006         the check at the low-level `This.DoResolve' level.
4007
4008         The `This.DoResolve'(appens before overload resolution, so it has
4009         no way of knowing if the method that will be called will be
4010         instace or static, triggering an erroneous report for cs0188 (Bug
4011         78113).
4012
4013         We now do the check for instance method invocations after we know
4014         what method will be called.
4015
4016         (This.CheckThisUsage): Move the actual use of this structure
4017         checking into its own method and expose it. 
4018
4019         * Everywhere that called Error_ValueCannotBeConverted: pass a new
4020         EmitContext.
4021
4022         Exceptions: Null.ConvertImplicitly,
4023         Constant.ImplicitConversionRequired as there are too many call
4024         sites for passing the ec. 
4025
4026         * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
4027         EmitContext, if the value is null, then we do not try to provide
4028         the extra information from the error (If a userdefined conversion
4029         exists, as UserDefinedConversion requires a non null-EmitContext).
4030
4031         Fixes: #80347
4032
4033 2006-12-30  Raja R Harinath  <rharinath@novell.com>
4034
4035         * flowanalysis.cs (MyBitVector): Document some invariants.
4036         (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
4037         introduced below, and add a couple of others, 
4038
4039 2006-12-30  Marek Safar  <marek.safar@gmail.com>
4040
4041         * attribute.cs (GetMethodObsoleteAttribute): Uses new
4042         GetPropertyFromAccessor and GetEventFromAccessor.
4043         
4044         * class.cs (MethodCore.CheckBase): A new warning when obsolete member
4045         overrides non-obsolete one.
4046         (Indexer.Define): Error message has been moved to the parser.
4047
4048         * cs-parser.jay: Better syntax errors handling.
4049
4050         * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
4051         when an invocation has no arguments.
4052
4053         * ecore.cs: Removed not used caching.
4054
4055         * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
4056         implementation.
4057
4058         * report.cs: Add a new warning.
4059
4060         * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
4061
4062         * typemanager.cs (enumeration_type): Removed.
4063         (CSharpSignature): Reuses IsSpecialMethod.
4064         (IsEqual): Hack for MS BCL.
4065         (GetPropertyFromAccessor): New method.
4066         (GetEventFromAccessor): New method.
4067         (IsSpecialMethod): Fixed to handle more cases.
4068
4069 2006-12-30  Marek Safar  <marek.safar@gmail.com>
4070
4071         * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
4072         Made white spaces array static.
4073
4074         * ecore.cs (RemoveGenericArity): Optimized.
4075
4076         * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
4077         10 times faster).
4078         (MyBitVector.initialize_vector): Simplified.
4079
4080 2006-12-22  Miguel de Icaza  <miguel@novell.com>
4081
4082         * ecore.cs: Am not entirely happy with this hack, but it seems to
4083         address the issue in 80257 (a small test case for
4084         CreativeDocs.NET). 
4085
4086         I set the MethodGroupExpr.Type to an internal compiler type
4087         (itself in this case) to force the resolution to take place.   Why
4088         it does not take place with a null is beyond me.
4089
4090 2006-12-20  Marek Safar  <marek.safar@gmail.com>
4091
4092         A fix for bug #80288
4093         * expression.cs (ResolveOperator): Consider user defined conversion for
4094         logical and operator too.
4095         (EmitBranchable): Optimization for logical and when full constant folding
4096         could not be applied but one operand is constant.
4097
4098 2006-12-19  Marek Safar  <marek.safar@gmail.com>
4099
4100         * class.cs (GetClassBases): Write 5 times every day, will never use
4101         FullName for error reporting.
4102
4103         * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
4104
4105 2006-12-19  Martin Baulig  <martin@ximian.com>
4106
4107         * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
4108         the symbol file info here.
4109
4110 2006-12-18  Marek Safar  <marek.safar@gmail.com>
4111
4112         * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
4113         of `elseif' is taking then following sections are not taking.
4114         Fixes an issue reported on mono mailing list.
4115
4116 2006-12-18  Marek Safar  <marek.safar@gmail.com>
4117
4118         A fix for bug #80300
4119         * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
4120         a caller is not taking.
4121
4122 2006-12-18  Raja R Harinath  <rharinath@novell.com>
4123
4124         * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
4125         (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
4126         (RootScopeInfo, AnonymousMethodMethod): Update to changes.
4127         * iterator.cs: Change several TypeContainer declarations to DeclSpace.
4128         * class.cs: Update to changes.
4129
4130 2006-12-17  Marek Safar  <marek.safar@gmail.com>
4131
4132         A fix for bug #79934
4133         * anonymous.cs (CompilerGeneratedClass): Register class in a shared
4134         partial container.
4135
4136         * class.cs (ResolveMembers): Register an iterator in current container and
4137         not in shared one.
4138
4139 2006-12-16  Raja R Harinath  <rharinath@novell.com>
4140
4141         Fix test-543.cs
4142         * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
4143         satisfy a params annotated parameter.
4144
4145 2006-12-16  Marek Safar  <marek.safar@gmail.com>
4146
4147         A fix for bug #77014
4148         * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
4149         paramters correctly and not rely on hacks in Parameters class.
4150         (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
4151         at any possition.
4152         (Invocation.VerifyArgumentsCompat): Ditto.
4153         (Invocation.EmitArguments): Changed to correctly emit params arguments at
4154         any possition.
4155
4156         * parameter.cs (HasParams): Don't assume that params is the last one.
4157
4158         * support.cs (ReflectionParameters.ctor): Look for params attribute
4159         correctly.
4160         (ReflectionParameters.ParameterType): Removed hack when we returned last
4161         parameter for out of range parameters.
4162         (ParameterName, ParameterModifier): Ditto.
4163
4164 2006-12-14  Marek Safar  <marek.safar@gmail.com>
4165
4166         A fix for bug #79987
4167         * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
4168         when assembly is not CLS compliant but type is. I have no idea why is this
4169         allowed.
4170
4171         * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
4172
4173 2006-12-13  Miguel de Icaza  <miguel@novell.com>
4174
4175         * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
4176         in struct constructors, they are basically no-ops.
4177
4178 2006-12-12  Marek Safar  <marek.safar@gmail.com>
4179
4180         * cs-tokenizer.cs (Position): Save preprocessor status too.
4181
4182 2006-12-12  Marek Safar  <marek.safar@gmail.com>
4183
4184         A fix for bug #77794
4185         * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
4186
4187 2006-12-12  Marek Safar  <marek.safar@gmail.com>
4188
4189         * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
4190         Fixes #69299.
4191         (pp_expr): Report error for an invalid expression.
4192         (handle_preprocessing_directive): Simplified; add more error checking.
4193
4194 2006-12-11  Marek Safar  <marek.safar@gmail.com>
4195
4196         A fix for bug #74939
4197         * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
4198         directives handling.
4199
4200 2006-12-10  Marek Safar  <marek.safar@gmail.com>
4201
4202         A fix for bugs #80093, and #75984
4203         * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
4204         logic, it seems to me as it worked before "by coincidence".
4205         (xtoken): Simplified to use reworked handle_preprocessing_directive.
4206         (cleanup): Enabled endif check.
4207
4208 2006-12-09  Marek Safar  <marek.safar@gmail.com>
4209
4210         A fix for bug #80162
4211         * statement.cs (CollectionForeach.TryType): Generics and non-generics
4212         enumerators are never ambiguous.
4213
4214 2006-12-08  Raja R Harinath  <rharinath@novell.com>
4215
4216         Fix #80060
4217         * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
4218
4219 2006-12-06  Marek Safar  <marek.safar@gmail.com>
4220
4221         A fix for bug #80144
4222         * class.cs (EventProperty.Define): Explicit implementation means
4223         that an even is used.
4224
4225 2006-12-06  Marek Safar  <marek.safar@gmail.com>
4226
4227         Fixes the operators implementation (part II)
4228
4229         * cfold.cs (DoConstantNumericPromotions): Renamed to
4230         DoBinaryNumericPromotions and simplified.
4231         (BinaryFold): Couple of conversion fixes; simplified.
4232
4233         * constant.cs, ecore.cs, literal.cs
4234         (ToType): Renamed to ConvertImplicitly.
4235         (Reduce): Renamed to ConvertExplicitly.
4236
4237         * class.cs, convert.cs: Updated.
4238
4239         * expression.cs: TryReduce doesn't throw an exception.
4240
4241 2006-12-01  Marek Safar  <marek.safar@gmail.com>
4242
4243         A fix for bug #80108
4244         * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
4245         compatible.
4246
4247 2006-11-30  Marek Safar  <marek.safar@gmail.com>
4248
4249         Fixes unary operators implementation (part I)
4250         Also fixes #80026
4251
4252         * cfold.cs (Error_CompileTimeOverflow): Made internal
4253
4254         * const.cs (IConstant): Changed to use reference to constant and
4255         not constant itself.
4256         Updated IConstant implementations.
4257
4258         * constant.cs (CreateConstant): New factory method.
4259         Updated IConstant implementation.
4260
4261         * convert.cs (ImplicitStandardConversionExists): Uses compiler Equals.
4262
4263         * ecore.cs: Updated to use CreateConstantReference.
4264
4265         * enum.cs: Reflects IConstant changes.
4266
4267         * expression.cs (Unary): Reimplemented +,-,~ to conform C# standard.
4268
4269         * literal.cs (NullConstant): Change to be independently usable.
4270
4271 2006-11-29  Martin Baulig  <martin@ximian.com>
4272
4273         * class.cs (Constructor.Emit): Correctly handle anonymous methods;
4274         we need to emit the scope initializer before calling the base .ctor.
4275
4276         * anonymous.cs: Merged back from the new anonymous methods branch.
4277         (AnonymousMethodHost): Renamed to `RootScopeInfo'.
4278
4279         * expression.cs (ParameterReference.DoResolveBase): Create a
4280         "normal" ScopeInfo when capturing parameters rather than using the
4281         root scope; this makes things work with anonymous methods having
4282         parameters.
4283
4284         * statement.cs
4285         (ToplevelBlock.AnonymousMethodHost): Renamed into `RootScope'.
4286
4287 2006-11-22  Marek Safar  <marek.safar@gmail.com>
4288
4289         A fix for bug #79987
4290         * class.cs (VerifyClsCompliance): Move redundant CLS compliance attribute
4291         check to a base class.
4292         * decl.cs (VerifyClsCompliance): Warn that CLS compliance cannot be tested
4293         only when assembly has missing attribute.
4294         * report.cs: Update.
4295
4296 2006-11-21  Marek Safar  <marek.safar@gmail.com>
4297
4298         * cs-tokenizer.cs: Merged with gmcs version.
4299
4300 2006-11-20  Marek Safar  <marek.safar@gmail.com>
4301
4302         * cs-tokenizer.cs,
4303         * cs-parser.jay: Better error message when partial keyword is misplaced.
4304
4305 2006-11-19  Gert Driesen  <drieseng@users.sourceforge.net>
4306
4307         A fix for bug #79810
4308         report.cs: CS1058 only applies to 2.0 profile (gmcs).
4309         codegen.cs: on 2.0 profile, non-exception throwables are wrapped in
4310         a RuntimeWrappedException by default.
4311
4312 2006-11-18  Marek Safar  <marek.safar@gmail.com>
4313
4314         A fix for bug #79843
4315         * delegate.cs (Delegate.VerifyMethod): Fixed covariance and contravariance
4316         implementation.
4317         (DelegateCreation.Error_NoMatchingMethodForDelegate): Ditto.
4318
4319 2006-11-18  Marek Safar  <marek.safar@gmail.com>
4320
4321         * driver.cs, namespace.cs: Uses faster IndexOf version.
4322
4323 2006-11-17  Marek Safar  <marek.safar@gmail.com>
4324
4325         A fix for bug #79941
4326         * class.cs (MemberCore.IsDuplicateImplementation): Add more tricks for
4327         operators.
4328         (Operator.Define): Implicit/Explicit operator of same type is duplicate
4329         even if internal name is different.
4330         * convert.cs (GetConversionOperator): Replaced EmitContext with parentType.
4331         (UserDefinedConversion): Simplified as the operators cannot be internal.
4332         * ecore.cs (Error_ValueCannotBeConverted): Take account of user
4333         conversions.
4334         (MethodLookup): Replaced EmitContext with parentType.
4335         * expression.cs: Updated.
4336
4337 2006-11-09  Raja R Harinath  <rharinath@novell.com>
4338
4339         * driver.cs (BadAssembly): Handle all the ugliness of
4340         DefineDynamicAssembly.
4341
4342 2006-11-08  Raja R Harinath  <rharinath@novell.com>
4343
4344         Address parts of #58244 -- most of what's left is in the runtime
4345         * driver.cs (LoadAssembly): Simplify slightly.  Add CS0009 and
4346         CS1509 error checks, and handle them for all assembly loads, not
4347         just the first invocation.
4348         (LoadModule): Likewise.  Move handling of 'adder_method' ...
4349         * codegen.cs (AssemblyClass.AddModule): ... here.
4350
4351 2006-11-02  Marek Safar  <marek.safar@gmail.com>
4352
4353         * statement.cs.cs (CollectionForeach.TryType): Issue a error when
4354         IEnumerable<T> is ambiguous.
4355
4356 2006-10-31  Marek Safar  <marek.safar@gmail.com>
4357
4358         A fix for bug #67689
4359         * statement.cs.cs (CollectionForeach.TryType): Issue a warning when
4360         GetEnumerator is ambiguous.
4361
4362         * report.cs: Add new warning.
4363
4364 2006-10-29  Marek Safar  <marek.safar@gmail.com>
4365
4366         A fix for bug #78602
4367         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
4368         to protected member can be nested type.
4369
4370 2006-10-28  Marek Safar  <marek.safar@gmail.com>
4371
4372         A fix for bug #78965
4373         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
4374         to protected member must derive from current type.
4375
4376 2006-10-27  Marek Safar  <marek.safar@gmail.com>
4377
4378         assign.cs: Reuses error method.
4379
4380         ecore.cs (Expression.Error_ValueCannotBeConverted): Report a value
4381         instead of type for constants.
4382         (Expression.Error_ValueAssignment): Common error method.
4383
4384         * expression.cs (UnaryMutator.ResolveOperator): Value cannot be used
4385         for any assignment.
4386
4387 2006-10-27  Marek Safar  <marek.safar@gmail.com>
4388
4389         A fix for bug #79081
4390         * expression.cs (MemberAccess.DoResolve): Check nested type
4391         accessibility.
4392
4393 2006-10-27  Atsushi Enomoto  <atsushi@ximian.com>
4394
4395         * doc.cs : nested delegates were not handled. Fixed bug #79754.
4396
4397 2006-10-26  Marek Safar  <marek.safar@gmail.com>
4398
4399         A fix for bug #76591
4400         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous method.
4401
4402 2006-10-26  Marek Safar  <marek.safar@gmail.com>
4403
4404         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Don't allow to have
4405         type forwarder of the same type multiple times.
4406
4407 2006-10-26  Raja R Harinath  <rharinath@novell.com>
4408
4409         Fix #78820
4410         * ecore.cs (PropertyExpr.InstanceResolve): Always resolve the
4411         instance as an rvalue, even when we later resolve as an lvalue.
4412
4413 2006-10-25  Martin Baulig  <martin@ximian.com>
4414
4415         * anonymous.cs: Fix #79673.
4416
4417 2006-10-24  Marek Safar  <marek.safar@seznam.cz>
4418
4419         A fix for bug #79666
4420         expression.cs (ArrayCreation.GetAttributableValue): An initializer can be
4421         ignored when is optimized (= default value) as its value is already set.
4422
4423 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
4424
4425         A fix for bug #79724
4426         * report.cs (SymbolRelatedToPreviousError): Uses DeclSpace instead of
4427         TypeContainer for type lookup.
4428
4429 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
4430
4431         A fix for bug #79231
4432         * ecore.cs (ResolveAsBaseTerminal): Removed redundant error test.
4433         * expression.cs (OverloadResolve): Always convert type name for
4434         an error message.
4435         (ResolveNamespaceOrType): Don't confuse a nested type with any 
4436         other member.
4437
4438 2006-10-18  Martin Baulig <martin@ximian.com>
4439
4440         * anonymous.cs: Propagate the IsStatic state, fixes the crasher in banshee.
4441
4442 2006-10-17  Miguel de Icaza  <miguel@novell.com>
4443
4444         * convert.cs: Fix typo, fixes the test-535.cs, we were casting to
4445         an int32, but requesting an int64 from the conversion
4446
4447 2006-10-12  Martin Baulig  <martin@ximian.com>
4448
4449         * anonymous.cs
4450         (AnonymousContainer.Resolve): Inflate the `ReturnType'.  Fixes #79592.
4451         
4452 2006-10-12  Martin Baulig  <martin@ximian.com>
4453
4454         * statement.cs
4455         (Using.EmitLocalVariableDeclFinally): Small fix for iterators.
4456
4457 2006-10-11  Miguel de Icaza  <miguel@novell.com>
4458
4459         * convert.cs: Remove broken code: I was doing the "Existance"
4460         tests for Implicit conversions.
4461
4462 2006-10-10  Miguel de Icaza  <miguel@novell.com>
4463
4464         * convert.cs: Added one missing case in
4465         ImplicitStandardConversionExists uint64 to intptr.
4466
4467         Fixes #59800
4468         
4469         * typemanager.cs (uintptr_type): another core known type.   
4470
4471         * ecore.cs (OperatorCast): routine used to do cast operations that
4472         depend on op_Explicit.  We could change some of the Decimal
4473         conversions to use this.
4474
4475         This one has a probe mechanism that checks both types for an op_
4476         which it coudl be used to eliminate two classes: CastToDecimal
4477         and CastFromDecimal.
4478
4479         * convert.cs: Implement the conversions documented in #59800
4480         
4481 2006-10-10  Martin Baulig  <martin@ximian.com>
4482
4483         * iterators.cs (Iterator.Resolve): Call RootScope.ResolveType()
4484         before RootScope.ResolveMembers().
4485
4486         * anonymous.cs (ScopeInfo.CapturedScope.ctor): Use the child's
4487         `CurrentType' if appropriate.
4488
4489 2006-10-09  Marek Safar  <marek.safar@seznam.cz>
4490
4491         A fix for bug #78568
4492         * cs-tokenizer.cs (Deambiguate_CloseParens): Expression cannot be cast
4493         when contains binary operators.
4494         * cs-parser.jay: Updated.
4495
4496 2006-10-09  Martin Baulig  <martin@ximian.com>
4497
4498         * delegate.cs
4499         (Delegate.DefineType): Don't call TypeParameter.Resolve() here;
4500         moved that into Define() and also do the other type parameter
4501         checks there.  Fixes #79094.  Added gtest-292.cs.
4502
4503         * expression.cs
4504         (ArrayCreation.EmitDynamicInitializers): Use `etype.IsValueType'
4505         since that doesn't include type parameters; don't use `Ldelema'
4506         for type parameters.  Fixes #78980.  Added gtest-293.cs.
4507
4508 2006-10-08  Marek Safar  <marek.safar@seznam.cz>
4509
4510         A fix for #77796
4511         * convert.cs (ExplicitReferenceConversion): Only enum to enum value
4512         conversion is allowed.
4513
4514 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
4515
4516         * ecore.cs (Expression.MemberLookup): Don't register any symbol for
4517         error reporting when no error occurs.
4518
4519 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
4520
4521         * cfold.cs (ConstantFold.BinaryFold): Report an error when the conversion
4522         does not exist.
4523
4524 2006-10-06  Raja R Harinath  <rharinath@novell.com>
4525
4526         Fix #79584
4527         * class.cs (DefineTypeBuilder): Check circular dependencies before
4528         setting the parent of the TypeBuilder.
4529         (CheckRecursiveDefinition): Don't use 'BaseType', since
4530         it may not be valid until after DefineTypeBuilder.  Use
4531         'base_type' instead.
4532
4533 2006-10-04  Martin Baulig  <martin@ximian.com>
4534
4535         Merged the Anonymous Methods patch.
4536
4537         * anonymous.cs, iterators.cs: The new anonymous methods code.
4538
4539         * statement.cs (Variable): New public abstract class.
4540         (LocalInfo.Variable): New public property.
4541         (LocalInfo.ResolveVariable): New public method.
4542         (Block.Flags): Add `IsIterator'.
4543         (Block.AddVariable): Improved the CS0136 check.
4544         (Block.AnonymousChildren): New public property.
4545         (Block.AddAnonymousChild): New public method.
4546         (ToplevelBlock): Update to use the new anonymous method framework.
4547         (ToplevelBlock.ctor): `container' is now a `Block' and not a
4548         `ToplevelBlock'; this is required to correctly implement the
4549         CS0136 check.
4550         (Fixed, Using): Use `TemporaryVariable' instead of directly
4551         creating the `LocalBuilder'.
4552
4553         * parameter.cs (Parameter.ResolveVariable): New public method.
4554         (Parameters.ResolveVariable): Likewise.
4555
4556         * ecore.cs (TemporaryVariable): Use the new `Variable' framework.
4557
4558         * class.cs (TypeContainer): Replaced the `iterators' list and
4559         corresponding methods with a list of `CompilerGeneratedClass'es.
4560         (TypeContainer.ResolveMembers): New public method.
4561         (Method): `IIteratorContainer' has been replaced by
4562         `IAnonymousHost'.
4563
4564         * expression.cs (VariableReference): New public abstract base
4565         class for `LocalVariableReference', `ParameterReference' and
4566         `This'.
4567
4568         * codegen.cs (EmitContext): Removed `capture_context',
4569         `HaveCaptureInfo', `EmitScopeInitFromBlock()' and `Capture*()'.
4570         (EmitContext.EmitThis): Removed.
4571
4572         * cs-parser.jay: Replace `iterator_container' with
4573         `anonymous_host'.       
4574
4575 2006-10-04  Martin Baulig  <martin@ximian.com>
4576
4577         * generic.cs (GenericMethod): Don't make this abstract.
4578         (Constraints.Clone): Added dummy implementation.
4579
4580 2006-10-04  Raja R Harinath  <harinath@gmail.com>
4581
4582         Fix #79577
4583         * namespace.cs (LookForAnyGenericType): Avoid nullref on
4584         'declspaces'.  Avoid allocating arrays willy-nilly.
4585
4586         Fix #79553
4587         * cfold.cs (BinaryFold): Move boolean Equality and Inequality
4588         cases out of the switch.
4589
4590 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
4591
4592         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Better error
4593         message when non-generic type is used with the type arguments.
4594         * expression.cs: Updated.
4595
4596 2006-09-28  Raja R Harinath  <rharinath@novell.com>
4597
4598         Fix #79013
4599         * convert.cs (Convert.ImplicitStandardConversionExists): Avoid infloop.
4600         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
4601         Change semantics slightly.  Don't insist on having only one
4602         temporary EmptyExpression -- just throttle the creation of new ones.
4603
4604         Fix #79451
4605         * ecore.cs (Expression.MemberLookup): Enable CS0229 errors for
4606         non-interfaces too.  If no methods are found, don't try to create
4607         a MethodGroupExpr.
4608
4609 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
4610
4611         * ecore.cs (ResolveAsTypeStep): Print better error when type can be
4612         generic type.
4613
4614         * namespace.cs (Namespace.LookForAnyGenericType): New method to help
4615         us produce better error message.
4616
4617 2006-09-27  Marek Safar  <marek.safar@seznam.cz>
4618
4619         * expression.cs (Binary.ResolveOperator): Warn about a side effect
4620         of the `|' operator.
4621
4622         * report.cs: A new warning added.
4623
4624 2006-09-27  Martin Baulig  <martin@ximian.com>
4625
4626         * generic.cs (GenericMethod): Don't make this abstract.
4627
4628 2006-09-27  Martin Baulig  <martin@ximian.com>
4629
4630         * report.cs
4631         (InternalErrorException): Added overloaded ctor taking a params array.
4632
4633 2006-09-26  Marek Safar  <marek.safar@seznam.cz>
4634
4635         * class.cs, codegen.cs, const.cs, cs-tokenizer.cs, driver.cs, ecore.cs:
4636         Fixed the cases when same error was reported twice.
4637
4638         * report.cs (SymbolRelatedToPreviousError): Simplified as all our messages
4639         now report symbol information.
4640
4641 2006-09-25  Martin Baulig  <martin@ximian.com>
4642
4643         * class.cs: Completely unified with the gmcs version.
4644
4645 2006-09-25  Martin Baulig  <martin@ximian.com>
4646
4647         * typemanager.cs (TypeManager.IsNullableType): New public function.
4648         (TypeManager.IsNullableTypeOf): Likewise.
4649         (TypeManager.IsNullableValueType): Likewise.
4650
4651         * class.cs (MethodCore): Added the `GenericMethod' argument from
4652         gmcs and also unified all classes derived from `MethodCore' with gmcs.
4653
4654 2006-09-24  Raja R Harinath  <harinath@gmail.com>
4655
4656         * convert.cs: Unify with gmcs version.
4657
4658 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
4659
4660         * decl.cs (DeclSpace.VerifyClsCompliance): When type has type parameters
4661         verify them as well.
4662
4663         * report.cs: New warning.
4664
4665 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
4666
4667         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
4668         for anonymous block with out argument.
4669
4670 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
4671
4672         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
4673         not used private events only.
4674
4675 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
4676
4677         * cfold.cs (BinaryFold): On the guest to unify empty constant cast.
4678
4679         * const.cs (Const.Define): Check for constant type.
4680         (Const.IsConstantTypeValid): Looks for valid constant types.
4681
4682         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
4683
4684         * ecore.cs (EmptyConstantCast): New common class for all constant based
4685         EmptyCast(s).
4686
4687         * expression.cs (Is.DoResolve): Handle null constant especially.
4688         (New.DoResolve): Check for new void().
4689         (MemberAccess.DoResolve): Cope with all kind of nulls.
4690
4691         * literal.cs (NullConstant): Uses EmptyConstantCast.
4692         (NullDefault): Based on EmptyConstantCast.
4693         (NullLiteral): Uses EmptyConstantCast.
4694
4695         * statement.cs (Block.ResolveMeta): Check for constant type.
4696
4697 2006-09-22  Martin Baulig  <martin@ximian.com>
4698
4699         * delegate.cs, attribute.cs: Merged with the gmcs versions.
4700
4701 2006-09-22  Raja R Harinath  <rharinath@novell.com>
4702
4703         * literal.cs (NullDefault): The type of default(IFoo) is 'IFoo',
4704         not the null type.
4705
4706         Fix part of #79451
4707         * typemanager.cs (Closure.Filter): Consider PrivateScope attributes.
4708         * decl.cs (DeclSpace.FindMemberToOverride): Likewise.  Reorganize
4709         code slightly.
4710
4711 2006-09-22  Martin Baulig  <martin@ximian.com>
4712
4713         * ecore.cs: Merged with the gmcs version.
4714
4715         * generic.cs (ConstructedType): New dummy class.
4716         (TypeArguments): Don't make this abstract.
4717
4718         * typemanager.cs
4719         (TypeManager.IsGenericTypeDefinition): New method.
4720         (TypeManager.GetGenericFieldDefinition): Moved here from gmcs.
4721
4722 2006-09-22  Raja R Harinath  <rharinath@novell.com>
4723
4724         * expression.cs (ComposedCast): Check for arrays of TypedReference
4725         before creating the type, not after.
4726
4727 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
4728
4729         * cfold.cs, const.cs, enum.cs, statement.cs: Updated
4730         after ToType change.
4731
4732         * constant.cs (Constant.ImplicitConversionRequired): Designed to used
4733         when constant must be implicitly convertible.
4734
4735         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
4736
4737         * ecore.cs (NullCast): Derives from NullConstant.
4738
4739         * expression.cs (Is.DoResolve): Removed useless variables.
4740         (Conditional.DoResolve): Quick hack for `Foo () ? null : null'.
4741         (New.Constantify): Add enum support.
4742         (MemberAccess.DoResolve): Add warning when accessing null constant or
4743         variable.
4744
4745         * generic.cs (GenericConstraints.IsReferenceType): Another dummy
4746         property.
4747
4748         * literal.cs (NullConstant): New abstract class with common
4749         functionality for all null specializations.
4750         (NullDefault): Represents default(X) when result can be
4751         reduced to null.
4752         (NullLiteral): Updated.
4753
4754         * report.cs: Add new warning.
4755
4756 2006-09-21  Martin Baulig  <martin@ximian.com>
4757
4758         * generic.cs (GenericTypeParameterBuilder): Removed this ugly hack.
4759
4760 2006-09-21  Martin Baulig  <martin@ximian.com>
4761
4762         * generic.cs (GenericConstraints): New dummy class.
4763         (Constraints): Likewise.
4764         (TypeParameter): Likewise.
4765         (TypeParameterName): Likewise.
4766         (GenericMethod): Likewise.
4767
4768         * typemanager.cs (TypeManager.GetGenericArguments): New method.
4769
4770         * decl.cs: Merged with the gmcs version.
4771
4772 2006-09-21  Raja R Harinath  <rharinath@novell.com>
4773
4774         * generic.cs (TypeParameter): Implement IMemberContainer.
4775         (GenericTypeParameterBuilder): New.  An abominable repugnant hack.
4776
4777         * rootcontext.cs: Unify with gmcs version.
4778
4779         * report.cs: Unify with gmcs version.
4780         * typemanager.cs (AddTypeParameter, LookupTypeParameter): Move
4781         from gmcs/generics.cs.
4782         * generics.cs (TypeParameter): New dummy class.
4783
4784         * support.cs: Unify with gmcs version.
4785
4786 2006-09-20  Raja R Harinath  <rharinath@novell.com>
4787
4788         * ecore.cs (MethodGroupExpr.ResolveGeneric): New dummy method.
4789         * expression.cs (MemberAccess, BaseAccess): Remove GMCS_SOURCE #ifdef.
4790
4791         * decl.cs (MemberName): Unify with gmcs, except for GetTypeExpression.
4792         * generic.cs (TypeArguments): New dummy class to help avoid #ifdefs.
4793         * mcs.exe.sources: Add generic.cs.
4794
4795         * codegen.cs: Unify with gmcs version.
4796
4797         * codegen.cs (IResolveContent.GenericDeclContainer): Copy from gmcs.
4798         (EmitContext): Add GenericDeclContainer implementation.
4799         * decl.cs (MemberCore, DeclSpace): Likewise.
4800         * namespace.cs: Remove #ifdef GMCS_SOURCE.
4801
4802         * namespace.cs (GetTypeInAssembly): Remove #ifdef GMCS_SOURCE.
4803         MCS TypeManager has a corresponding dummy method.
4804
4805 2006-09-19  Martin Baulig  <martin@ximian.com>
4806
4807         * expression.cs: Completely merged with the gmcs version.
4808
4809 2006-09-19  Martin Baulig  <martin@ximian.com>
4810
4811         * expression.cs (Invocation): Merged with the gmcs version.
4812         (ArrayAccess.GetStoreOpcode): Likewise.
4813
4814 2006-09-19  Martin Baulig  <martin@ximian.com>
4815
4816         * typemanager.cs
4817         (TypeManager.IsGenericMethod): Moved here from ../gmcs/generic.cs.
4818         (TypeManager.IsGenericMethodDefinition): Likewise.
4819
4820 2006-09-19  Martin Baulig  <martin@ximian.com>
4821
4822         * typemanager.cs
4823         (TypeManager.IsEqual): Moved the gmcs implementation here.
4824         (TypeManager.DropGenericTypeArguments): Likewise.
4825         (TypeManager.DropGenericMethodArguments): Likewise.
4826         (TypeManager.GetTypeArguments): Moved here from gmcs.
4827         (TypeManager.HasGenericArguments): Likewise.
4828
4829 2006-09-19  Martin Baulig  <martin@ximian.com>
4830
4831         * expression.cs (Binary): Merged with the gmcs version.
4832
4833 2006-09-19  Martin Baulig  <martin@ximian.com>
4834
4835         * expression.cs (Probe, As, Is): Merged with the gmcs version.
4836
4837 2006-09-19  Martin Baulig  <martin@ximian.com>
4838
4839         * typemanager.cs: Merged with the gmcs version.
4840
4841 2006-09-16  Raja R Harinath  <rharinath@novell.com>
4842
4843         * AssemblyInfo.cs [GMCS_SOURCE]: Unify with gmcs source.
4844         * driver.cs: Likewise.
4845
4846 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
4847
4848         A fix for #79401
4849         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
4850         only if parent type is class.
4851         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
4852         update.
4853
4854 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
4855
4856         * cs-parser.jay,
4857         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
4858         keywords are used.
4859         * typemanager.cs(CSharpName): Converts NullType to null.
4860
4861 2006-09-15  Martin Baulig  <martin@ximian.com>
4862
4863         * typemanager.cs
4864         (TypeManager.GetMethodName): Added mcs implementation.
4865         (TypeManager.IsEqual): Likewise.
4866
4867         * ecore.cs
4868         (SimpleName.RemoveGenericArity): Added dummy implementation.
4869
4870         * pending.cs: Merged with the gmcs version.     
4871
4872 2006-09-15  Martin Baulig  <martin@ximian.com>
4873
4874         * statement.cs: Merge with the gmcs version.
4875
4876 2006-09-15  Martin Baulig  <martin@ximian.com>
4877
4878         * statement.cs (Switch): Merge with the gmcs implementation
4879         (without nullables), which is newer.
4880
4881 2006-09-15  Martin Baulig  <martin@ximian.com>
4882
4883         * statement.cs (Block.Variables): Make this public.
4884         (ToplevelBlock.Parameters): Make this a property.
4885         (Throw.Resolve): Use `TypeManager.IsSubclassOf ()'.
4886
4887 2006-09-15  Martin Baulig  <martin@ximian.com>
4888
4889         * namespace.cs: Merge with the gmcs version.
4890
4891 2006-09-15  Martin Baulig  <martin@ximian.com>
4892
4893         * decl.cs (MemberName): Minor code cleanups.
4894
4895 2006-09-15  Martin Baulig  <martin@ximian.com>
4896
4897         * parameter.cs: Merge with the gmcs version.
4898
4899 2006-09-15  Martin Baulig  <martin@ximian.com>
4900
4901         * enum.cs: Merge with the gmcs version: 3005 is a warning in gmcs
4902         and an error in mcs.
4903
4904 2006-09-15  Martin Baulig  <martin@ximian.com>
4905
4906         * flowanalysis.cs: Merged from GMCS; added the generics code into
4907         a `GMCS_SOURCE' conditional so we can share this file.
4908
4909 2006-09-08  Martin Baulig  <martin@ximian.com>
4910
4911         * typemanager.cs (TypeManager.interlocked_type): New public field.
4912         (TypeManager.int_interlocked_compare-exchange): New public field.
4913         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
4914         enumerator types here and call InitGenericCoreTypes().
4915         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
4916         after calling InitEnumUnderlyingTypes().
4917
4918         * rootcontext.cs
4919         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
4920         `classes_second_stage'. 
4921
4922 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
4923
4924         * assign.cs, ecore.cs, expression.cs: Share error message text.
4925         * class.cs (FieldMember.Define): Check for varible of static type.
4926         * driver.cs (LoadAssembly): Uses error output for errors.
4927         * statement.cs: Updated.
4928
4929 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
4930
4931         * expression.cs (Error_OperatorCannotBeApplied): Report type instead of
4932         type instance.
4933
4934 2006-09-07  Martin Baulig  <martin@ximian.com>
4935
4936         * driver.cs
4937         (MainDriver): Revert r62663 from Marek; see #70506 for details.
4938
4939 2006-08-29  Miguel de Icaza  <miguel@novell.com>
4940
4941         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
4942         
4943 2006-08-17  Miguel de Icaza  <miguel@novell.com>
4944
4945         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
4946         #52019 and #79064, the use of the \uXXXX sequence in source code
4947         to represent unicode characters.
4948
4949 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
4950
4951         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
4952         support.
4953         * class.cs, ecore.cs, statement.cs: Merged to one error message.
4954
4955 2006-08-13  Miguel de Icaza  <miguel@novell.com>
4956
4957         * assign.cs: Catch attempts to assign to a method groups in += and
4958         report as 1656
4959
4960 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
4961
4962         A fix for #79056
4963         * cs-parser.jay: Don't destroy current array type by typeof of array's.
4964
4965 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
4966
4967         * class.cs (Method.Define): Issue a warning when generic method looks like
4968         an entry point.
4969         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
4970         as well.
4971
4972 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
4973  
4974         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
4975         looking for ctor.
4976         * decl.cs (MemberCache.FindMembers): When container is interface we need to
4977         search all base interfaces as a member can be ambiguous.
4978         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
4979         Constructor member type filter. 
4980         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
4981         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
4982         reporting for returned memberinfos.
4983         * report.cs: Updated.
4984         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
4985         version to work on all runtimes.
4986         (TypeManager.RealMemberLookup): Removed members filtering.
4987
4988 2006-08-08  Raja R Harinath  <rharinath@novell.com>
4989
4990         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
4991         (PropertyExpr.EmitAssign): Likewise.
4992         * expression.cs (Indirection.EmitAssign): Likewise.
4993         (LocalVariableReference.EmitAssign): Likewise.
4994         (ParameterReference.EmitAssign): Likewise.
4995         (Invocation.EmitArguments): Likewise.
4996         (ArrayAccess.EmitAssign): Likewise.
4997         (IndexerAccess.EmitAssign): Likewise.
4998         (This.EmitAssign): Likewise.
4999         (ConditionalLogicalOperator.Emit): Likewise.
5000
5001         Fix #79026
5002         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
5003         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
5004         leave it in after returning it.
5005         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
5006
5007 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
5008
5009         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
5010         message.
5011
5012 2006-08-03  Raja R Harinath  <rharinath@novell.com>
5013
5014         Fix cs0146-3.cs and cs0146-4.cs.
5015         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
5016         enclosing types don't depend on the current type.
5017
5018 2006-08-02  Raja R Harinath  <rharinath@novell.com>
5019
5020         Fix #77963
5021         * class.cs (TypeContainer.DoDefineMembers): Use
5022         FindBaseMemberWithSameName on Parent, since we're interested in
5023         whether we hide inherited members or not.
5024         (FindBaseMemberWithSameName): Make slightly more robust.
5025
5026         Fix the non-generic testcase from #77396
5027         * decl.cs (DeclSpace.DeclContainer): Remove override.
5028
5029         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
5030         declspaces for doppelgangers too.
5031         (UsingEntry): Implement IResolveContext.
5032         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
5033         'this' as the resolve context.
5034         (LocalAliasEntry): Likewise.
5035
5036         Implement parts of #77403
5037         * roottypes.cs (RootDeclSpace): New.  Used to represent the
5038         toplevel declaration space.  Each namespace declaration introduces
5039         a "partial" root declaretion space.
5040         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
5041         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
5042         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
5043         from 'current_namespace.SlaveDeclSpace'.
5044         (namespace_declaration): Likewise.
5045         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
5046         check.  It can't happen now.
5047         * decl.cs (DeclSpace.LookupType): Likewise.
5048         * driver.cs (MainDriver): Sanity check.
5049
5050 2006-08-01  Raja R Harinath  <rharinath@novell.com>
5051
5052         * decl.cs (DeclSpace.FindNestedType): Remove.
5053         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
5054         LookupTypeContainer to get the container of the nested type.
5055         * class.cs (TypeContainer.FindNestedType): Make non-override.
5056
5057 2006-07-31  Raja R Harinath  <rharinath@novell.com>
5058
5059         * decl.cs (DeclSpace.PartialContainer): Move field from ...
5060         * class.cs (TypeContainer.PartialContainer): ... here.
5061         (TypeContainer.AddBasesForPart): New helper.
5062         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
5063         instead.
5064         * cs-parser.jay (current_class): Convert to DeclSpace.
5065         (struct_declaration, interface_declaration, class_declaration):
5066         Use AddBasesForPart instead of .Bases directly.
5067         * const.cs, iterators.cs: Update to changes.
5068
5069 2006-07-28  Raja R Harinath  <rharinath@novell.com>
5070
5071         * class.cs (TypeContainer.AddMemberType): Rename from
5072         AddToTypeContainer.
5073         (TypeContainer.AddMember): Rename from AddToMemberContainer.
5074         (AddTypeContainer): New.  Combine AddClassOrStruct and
5075         AddInterface.
5076         (AddPartial): Update.  Add 'is_partial' argument.
5077         * roottypes.cs: Update to changes.
5078         * cs-parser.jay (push_current_class): New helper for handling
5079         current_container and current_class.
5080         (struct_declaration, interface_declaration, class_declaration):
5081         Use it.
5082
5083 2006-07-26  Raja R Harinath  <rharinath@novell.com>
5084
5085         * roottypes.cs: Rename from tree.cs.
5086
5087         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
5088         * tree.cs (Tree, ITreeDump): Remove types.
5089         * rootcontext.cs (tree, Tree): Remove fields.
5090         (root, ToplevelTypes): New.
5091         * *.cs: Update to rename.
5092
5093         * tree.cs (Tree.RecordDecl): Remove.
5094         (RootTypes.AddToTypeContainer): Record the toplevel type in its
5095         namespace here.
5096         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
5097
5098 2006-07-23  Raja R Harinath  <harinath@gmail.com>
5099
5100         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
5101         DoFlowAnalysis and OmitStructFlowAnalysis here.
5102         (ec.With): Rename from WithUnsafe and generalize.
5103         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
5104         (ec.WithFlowAnalyis): New.
5105         * ecore.cs, expression.cs, statement.cs: Update.
5106
5107 2006-07-22  Raja R Harinath  <harinath@gmail.com>
5108
5109         * statement.cs (Block.ResolveMeta): Simplify slightly.
5110
5111         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
5112         multiple boolean fields.  Convert InUnsafe, constant_check_state,
5113         check_state to flags.
5114         (CheckState, ConstantCheckState): Update.
5115         (InUnsafe): New read-only property.
5116         (FlagsHandle): Rename from CheckStateHandle and convert to handle
5117         arbitrary flags.
5118         (WithUnsafe): New helper similar to WithCheckState.
5119         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
5120         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
5121
5122 2006-07-21  Raja R Harinath  <rharinath@novell.com>
5123
5124         Make comparisons use the same IL irrespective of whether they're
5125         in a 'checked' or 'unchecked' context: one of the issues in #78899
5126         * codegen.cs (EmitContext.CheckState): Make read-only property.
5127         (EmitContext.ConstantCheckState): Likewise.
5128         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
5129         helper that implement a save/restore stack for CheckState
5130         values.  This is the only way to change check-state.
5131         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
5132         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
5133         (CheckedExpr.EmitBranchable): New forwarding method.
5134         (UnCheckedExpr): Likewise.
5135         * statement.cs (Block.ResolveMeta): Use WithCheckState.
5136         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
5137         (Checked.Resolve, checked.DoEmit): Likewise.
5138
5139 2006-07-20  Miguel de Icaza  <miguel@novell.com>
5140
5141         * anonymous.cs: Cache the resolved anonymous delegate, and return
5142         this so that the ResolveTopBlock is only triggered once, not
5143         twice.
5144
5145         Currently we trigger ResolvetopBlock twice due to a first pass of
5146         argument check compatibility, and a second pass that does the
5147         actual resolution.   
5148         
5149 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
5150
5151         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
5152         modifiers.
5153         * rootcontext.cs (Reset): Add helper_classes.
5154
5155 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
5156
5157         A fix for #78860
5158         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
5159         correctly.
5160
5161 2006-07-13  Miguel de Icaza  <miguel@novell.com>
5162
5163         * statement.cs (Lock): Handle expressions of type
5164         TypeManager.null_type specially.  Fixes #78770
5165
5166 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
5167
5168         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
5169         to an event.
5170
5171 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
5172
5173         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
5174         for accessors as well.
5175         * ecore.cs (EventExpr): Add AccessorTable.
5176
5177 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
5178
5179         A fix for #78738
5180         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
5181         for CS0122 where appropriate.
5182         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
5183         level attributes.
5184         (Filter): Assembly can be null in the case of top level attributes.
5185
5186 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
5187
5188         A fix for #78690
5189
5190         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
5191         is done at global level.
5192
5193 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
5194
5195         A fix for #77002, Implemented TypeForwarder support.
5196
5197         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
5198         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
5199         * typemanager.cs (): Add type_forwarder_attr_type.
5200
5201 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
5202
5203         * report.cs: Add CS0469 warning.
5204
5205 2006-06-21  Martin Baulig  <martin@ximian.com>
5206
5207         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
5208         the `try'-block, so we also report CS0016 etc. there.
5209
5210 2006-06-21  Martin Baulig  <martin@ximian.com>
5211
5212         * delegate.cs
5213         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
5214
5215 2006-06-21  Martin Baulig  <martin@ximian.com>
5216
5217         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
5218         also report CS1686 for parameters.
5219
5220 2006-06-21  Martin Baulig  <martin@ximian.com>
5221
5222         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
5223         instead of an error if the value is not implicitly convertible to
5224         the switch types; fixes #77964.
5225
5226 2006-06-21  Raja R Harinath  <rharinath@novell.com>
5227
5228         Fix #78673
5229         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
5230         FieldBuilder is null.
5231
5232         Fix #78662
5233         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
5234         'left' and 'right' before error-checking.
5235
5236 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
5237
5238         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
5239         Fixed bug #78601.
5240         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
5241         (FieldExpr.DoResolve): likewise.
5242         (PropertyExpr.InstanceResolve): likewise.
5243         (EventExpr.InstanceResolve): likewise. 
5244
5245 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
5246
5247         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
5248         attribute applicable tests for attribute argument.
5249
5250 2006-06-02  Raja R Harinath  <rharinath@novell.com>
5251
5252         Fix #78079
5253         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
5254         (Binary.OverloadResolve_PredefinedIntegral): New.
5255         (Binary.OverloadResolve_PredefinedFloating): New.
5256         (Binary.OverloadResolve_PredefinedString): New.
5257         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
5258         Follow the standard more closely, and treat numeric promotions in
5259         terms of overload resolution.
5260         (Binary.CheckShiftArguments): Simplify.
5261
5262 2006-06-01  Raja R Harinath  <rharinath@novell.com>
5263
5264         * flowanalysis.cs (MyBitVector): Simplify representation.
5265         (MyBitVector.Clone): Avoid allocating BitArray.
5266         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
5267         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
5268         (*): Update.  Change all references to MyBitVector.And and
5269         MyBitVector.Or to &= and |=.
5270
5271 2006-05-29  Raja R Harinath  <rharinath@novell.com>
5272
5273         Fix cs0231-[34].cs.
5274         * cs-parser.jay (formal_parameter_list): Extend the pattern below
5275         to param arguments too.
5276
5277 2006-05-26  Miguel de Icaza  <miguel@novell.com>
5278
5279         * cs-parser.jay: Catch another parsing form for arglist being
5280         followed by other arguments.  Fixes #78313.
5281
5282 2006-05-24  Raja R Harinath  <rharinath@novell.com>
5283
5284         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
5285         checking of out parameters to ...
5286         (FlowBranchingToplevel.Merge): ... here.
5287         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
5288         set, propagate the origin upward, and only complain if there was
5289         no other error.
5290         (FlowBranchingException.AddContinueOrigin): Likewise.
5291         (FlowBranchingException.AddReturnOrigin): Likewise.
5292         (FlowBranchingException.AddGotoOrigin): Likewise.       
5293
5294 2006-05-23  Raja R Harinath  <rharinath@novell.com>
5295
5296         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
5297         unreachable, skip it.
5298         (FlowBranchingException.Merge): Always propagate jumps, even if
5299         the finally block renders subsequent code unreachable.
5300
5301 2006-05-18  Raja R Harinath  <rharinath@novell.com>
5302
5303         Fix #77601
5304         * statement.cs (Goto.Resolve): Move responsibility for resolving
5305         'goto' to FlowBranching.AddGotoOrigin.
5306         (Goto.SetResolvedTarget): New.  Callback to set the
5307         LabeledStatement that's the target of the goto.
5308         (Goto.DoEmit): Use Leave instead of Br when crossing an
5309         unwind-protect boundary.
5310         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
5311         LookupLabel and adjust to new semantics.
5312         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
5313         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
5314         Goto.SetResolvedTarget to update target.
5315         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
5316         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
5317         AddBreakOrigin & co.  Delay propagation until ...
5318         (FlowBranchingException.Merge): ... this.
5319
5320         * statement.cs (Block.Resolve): Always depend on flow-branching to
5321         determine unreachability.  Kill workaround that originally emitted
5322         only one statement after an "unreachable" label (see infloop in
5323         test-515.cs).
5324
5325         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
5326         This is still "wrong", but anything better would probably need a
5327         multi-pass algorithm.
5328         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
5329         usage vector.  Force current usage vector to be reachable, to
5330         optimistically signify backward jumps.
5331         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
5332         detected.
5333         (FlowBranchingLabeled.Merge): New.  If no backward jump was
5334         detected, return the original salted-away usage vector instead,
5335         updated with appropriate changes.  Print unreachable warning if
5336         necessary.
5337         * statement.cs (Block.Resolve): Don't print unreachable warning on
5338         a labeled statement.
5339
5340 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
5341
5342         * driver.cs: Pass filename without path to AssemblyBuilder's 
5343         AddResourceFile. Fixes bug #78407.
5344
5345 2006-05-17  Raja R Harinath  <rharinath@novell.com>
5346
5347         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
5348         * flowanalysis.cs (FlowBranchingLabeled): ... here.
5349         (FlowBranching.MergeChild): Overwrite
5350         reachability information from Labeled branchings too.
5351
5352 2006-05-16  Raja R Harinath  <rharinath@novell.com>
5353
5354         * statement.cs (Goto.Resolve): Merge jump origins here ...
5355         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
5356
5357         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
5358         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
5359         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
5360         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
5361         here, ...
5362         * statement.cs (Goto.Resolve): ... not here.
5363         (Goto.Emit): Remove CS1632 check.
5364
5365 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
5366
5367         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
5368         error message.
5369
5370 2006-05-11  Raja R Harinath  <rharinath@novell.com>
5371
5372         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
5373         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
5374         (FlowBranchingException.Label): Likewise.
5375
5376         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
5377         given value.
5378         (MyBitVector.Or): Use it to avoid losing information (Count).
5379         (FlowBranching.MergeOrigins): Likewise.
5380
5381         * flowanalysis.cs (UsageVector.IsDirty): Remove.
5382         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
5383         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
5384         (UsageVector.ToString): Simplify.
5385         (UsageVector.MergeSiblings): Move here from ...
5386         (FlowBranching.Merge): ... here.
5387         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
5388         not a MyBitVector.
5389
5390 2006-05-10  Raja R Harinath  <rharinath@novell.com>
5391
5392         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
5393         null bitvector is treated as all-true.
5394
5395         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
5396         (MyBitVector): Rationalize invariants.  'vector != null' implies
5397         that we have our own copy of the bitvector.  Otherwise,
5398         'InheritsFrom == null' implies all inherited bits are true.
5399
5400 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
5401
5402         * statement.cs (LocalInfo): Add IsConstant.
5403         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
5404         local variable for constants.
5405
5406 2006-05-09  Raja R Harinath  <rharinath@novell.com>
5407
5408         * flowanalysis.cs (MyBitVector.Empty): New.
5409         (MyBitVector): Don't allow InheritedFrom to be null.
5410         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
5411         (UsageVector, FlowBranching): Update to changes.
5412
5413         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
5414         recursion.  The 'Parent == null' condition isn't sufficient for
5415         anonymous methods.
5416         (FlowBranching.AddBreakOrigin): Likewise.
5417         (FlowBranching.AddContinueOrigin): Likewise.
5418         (FlowBranching.AddReturnOrigin): Likewise.
5419         (FlowBranching.StealFinallyClauses): Likewise.
5420         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
5421         (FlowBranching.CheckOutParameters): Likewise.
5422         (FlowBranchingToplevel): Terminate all the above recursions here.
5423         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
5424         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
5425
5426         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
5427         toplevel block.
5428         (FlowBranchingToplevel): New.  Empty for now.
5429         (FlowBranching.MergeTopBlock): Update.
5430         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
5431         branching for the anonymous delegate.
5432         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
5433
5434         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
5435         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
5436         information at the start of the merge.  Reorganize.
5437
5438 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
5439
5440         * class.cs (MethodData.Define): Method cannot implement interface accessor.
5441
5442 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
5443
5444         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
5445         to newly introduced ctor.
5446
5447         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
5448         message to one place.
5449         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
5450         global namespace.
5451
5452 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
5453
5454         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
5455
5456         * ecore.cs (Expression.ResolveAsConstant): Updated.
5457
5458         * statement.cs (ResolveMeta): Updated.
5459
5460 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
5461
5462         * cs-parser.jay: __arglist cannot be used in initializer.
5463
5464 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
5465
5466         A fix for #77879
5467         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
5468         private types.
5469
5470 2006-05-05  Raja R Harinath  <rharinath@novell.com>
5471
5472         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
5473         (LabeledStatement): Add 'name' parameter.
5474         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
5475         (Block.AddLabel): Update to changes.
5476         * cs-parser.jay (labeled_statement): Likewise.
5477
5478         * flowanalysis.cs (BranchingType.Labeled): New.
5479         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
5480         (FlowBranchingLabeled): New.  Does nothing for now, but will
5481         eventually handle 'goto' flows.
5482         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
5483         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
5484         that's terminated ...
5485         (Block.Resolve): ... here.
5486
5487         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
5488         (UsageVector.MergeFinallyOrigins): Likewise.
5489         (FlowBranching.InTryOrCatch): Likewise.
5490         (FlowBranching.AddFinallyVector): Likewise.
5491         (FlowBranchingException): Update to changes.
5492
5493         Fix #78290
5494         * statement.cs (Return.Resolve): Move error checking to ...
5495         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
5496         (FlowBranchingException): Handle return origins like break and
5497         continue origins.
5498         (FlowBranching.UsageVector.CheckOutParameters): Remove.
5499
5500 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
5501
5502         A fix for #76122
5503         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
5504         filter.
5505
5506 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
5507
5508         A fix for #77543
5509         * class.cs (MethodData.Define): Do public accessor check only when method
5510         implements an interface.
5511
5512 2006-05-04  Raja R Harinath  <rharinath@novell.com>
5513
5514         Remove special handling of 'break'
5515         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
5516         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
5517         (UsageVector.Break): Remove.
5518         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
5519         reachability.
5520         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
5521
5522         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
5523         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
5524
5525 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
5526
5527         A fix for #75726
5528         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
5529         be the interface member.
5530
5531 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
5532
5533         A fix for #60069
5534         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
5535         for emitting small (int) values.
5536
5537 2006-05-03  Raja R Harinath  <rharinath@novell.com>
5538
5539         Fix #59427
5540         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
5541         control-flow passes through the 'finally' after merging-in all the
5542         control-flows from 'try' and the 'catch' clauses.
5543
5544         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
5545         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
5546         always true at the only non-recursive entry point.
5547         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
5548         FlowBranchingBreakable.
5549         (FlowBranchingLoop): Remove.
5550         * statement.cs (Return.DoResolve): Update to changes.
5551
5552         Fix #76471, #76665
5553         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
5554         (FlowBranching.CreateBranching): Handle it: create a
5555         FlowBranchingContinuable.
5556         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
5557         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
5558         except that it handles the 'continue' command.
5559         (FlowBranching.UsageVector.MergeOrigins): Rename from
5560         MergeBreakOrigins.
5561         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
5562         except that it overrides AddContinueOrigin.
5563         (FlowBranchingException): Override AddContinueOrigin, similar to
5564         AddBreakOrigin.
5565         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
5566         Create a new branching around the embedded statement.
5567         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
5568         control flow after the embedded statement.
5569         (Continue.Resolve): Move all error checking to AddContinueOrigin.
5570
5571         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
5572         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
5573         FlowBranchingBreakable.
5574         (FlowBranchingSwitch): Remove.
5575
5576         Fix test-503.cs
5577         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
5578         error reporting to ...
5579         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
5580         Rename from 'AddBreakVector'.  Add new location argument.  Return
5581         a bool indicating whether the 'break' crosses an unwind-protect.
5582         (FlowBranchingException.AddBreakOrigin): Add.
5583         (FlowBranchingException.Merge): Propagate 'break's to surrounding
5584         flowbranching after updating with the effects of the 'finally'
5585         clause.
5586         (FlowBranchingBreakable): New common base class for
5587         FlowBranchingLoop and FlowBranchingSwitch.
5588
5589         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
5590         embedded statement.
5591         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
5592
5593 2006-05-02  Raja R Harinath  <rharinath@novell.com>
5594
5595         * statement.cs (Do.Resolve): If the loop is infinite, set the
5596         barrier.
5597         (While.Resolve, For.Resolve): Set a barrier after the embedded
5598         statement.  There's no direct control flow that goes from the end
5599         of the embedded statement to the end of the loop.
5600         * flowanalysis.cs (FlowBranching.Infinite): Remove.
5601         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
5602         above ensure that the reachability is correctly computed.
5603
5604         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
5605         (UsageVector.MergeBreakOrigins): If the current path is
5606         unreachable, treat it as if all parameters/locals are initialized.
5607         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
5608         infinite loops before merging-in break origins.
5609
5610         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
5611         (Reachability.Reachable): Split part into ...
5612         (Reachability.Unreachable): ... this.  Simplify.
5613         (Reachability.IsUnreachable): Use 'Unreachable' instead.
5614
5615         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
5616         (Reachability.SetThrowsSometimes): Likewise.
5617         (FlowBranchingBlock.MergeTopBlock): Don't compare against
5618         TriState.Always, use corresponding property.
5619         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
5620         (Block.Resolve): Likewise.  Remove some redundant checks.
5621
5622 2006-05-02  Raja R Harinath  <harinath@gmail.com>
5623
5624         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
5625         (Reachability.Meet): Don't bother checking AlwaysThrows --
5626         barrier is always set.
5627         (FlowBranchingBlock.Merge): Likewise.
5628
5629 2006-05-01  Raja R Harinath  <harinath@gmail.com>
5630
5631         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
5632         checks for unreachable.
5633
5634 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
5635
5636         A fix for #77980
5637         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
5638
5639         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
5640         whether field is really assigned.
5641
5642 2006-04-30  Raja R Harinath  <harinath@gmail.com>
5643
5644         * flowanalysis.cs (Reachability): Make 4-argument constructor
5645         private.
5646         (Reachability.Meet): Rename from 'And'.  Remove static variant.
5647         (Reachability.Always): Rename from the highly misleading
5648         'Reachability.Never'.
5649         (FlowBranching.Merge): Update to changes.  Mark an impossible
5650         situation with a 'throw'.
5651         (*): Update to changes.
5652
5653 2006-04-29  Raja R Harinath  <harinath@gmail.com>
5654
5655         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
5656         Remove 'Undefined'.
5657         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
5658         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
5659         (*): Update to changes.
5660         * statement.cs: Update to changes.
5661
5662 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
5663
5664         A fix for #78049
5665         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
5666
5667 2006-04-28  Raja R Harinath  <harinath@gmail.com>
5668
5669         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
5670         dummy UsageVector.
5671
5672         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
5673         argument to two arguments: an usage-vector and a bool.  Move call
5674         to FlowBranching.Merge () ...
5675         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
5676
5677         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
5678         handling of loop and switch reachability to ...
5679         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
5680
5681 2006-04-27  Raja R Harinath  <harinath@gmail.com>
5682
5683         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
5684         handling to FlowBranchingLoop.InLoop.
5685         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
5686
5687 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
5688
5689         A fix for #78115
5690         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
5691         anonymous method is allowed from AnonymousContainer here.
5692
5693         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
5694
5695 2006-04-24  Raja R Harinath  <rharinath@novell.com>
5696
5697         Fix #78156
5698         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
5699
5700 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
5701
5702         A fix for #49011.
5703         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
5704         (DoubleConstant.Reduce): Ditto.
5705
5706 2006-04-23  Raja R Harinath  <rharinath@novell.com>
5707
5708         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
5709         Remove 'lvalue_right_side' argument.  Move parts to ...
5710         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
5711         (LocalVariable.DoResolveLValue): ... these.
5712
5713 2006-04-21  Raja R Harinath  <rharinath@novell.com>
5714
5715         Fix cs1655.cs
5716         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
5717         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
5718         (LocalVariableReference.DoResolveBase): Use it to implement new
5719         CS1655 check.
5720         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
5721         (Argument.Resolve): Simplify.  Move CS1510 check ...
5722         * ecore.cs (Expression.ResolveLValue): ... here.
5723         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
5724         (PropertyExpr.DoResolveLValue): Likewise.
5725         (FieldExpr.Report_AssignToReadonly): Likewise.
5726         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
5727         LValueMemberAccess or LValueMemberOutAccess on instance depending
5728         on it.
5729         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
5730         DoResolve as appropriate.
5731
5732 2006-04-20  Raja R Harinath  <rharinath@novell.com>
5733
5734         Fix #75800
5735         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
5736         implicit conversions on 'out' and 'ref' arguments.
5737
5738         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
5739         improve clarity.  Remove dead code.
5740
5741         Fix #66031
5742         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
5743         (Catch.Resolve): Resolve VarBlock if it exists.
5744
5745 2006-04-19  Miguel de Icaza  <miguel@novell.com>
5746
5747         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
5748         twice, this was some residual code, the enumerator was emitted
5749         properly in the two branche of if later.
5750
5751 2006-04-19  Raja R Harinath  <rharinath@novell.com>
5752
5753         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
5754         cast is never an lvalue.
5755         (Cast.DoResolve, Cast.ResolveRest): Combine.
5756         (Argument.Emit): Simplify slightly.  Move 'Expr is
5757         IMemoryLocation' check ...
5758         (Argument.Resolve): ... here.
5759         (Argument.Error_LValueRequired): Remove.  Inline into only user.
5760
5761         Simplifications.  Fix cs0191-2.cs
5762         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
5763         CS1649 and CS1651 to ...
5764         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
5765         the actual selection of the error code and message to a lookup
5766         table.  Add a dummy return value to simplify callsites.
5767         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
5768         readonly fields of other instances of the same type.  Move CS0197
5769         warning from ...
5770         * expression.cs (Argument.Resolve): ... here.  Simplify code.
5771         Ensure that ec.InRefOutArgumentResolving is only set during LValue
5772         resolution of an out or ref argument.  The code simplification
5773         above uses this invariant.
5774
5775 2006-04-18  Raja R Harinath  <rharinath@novell.com>
5776
5777         Possibly fix #77752.  Fix cs1690-[4-7].cs.
5778         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
5779         CheckMarshallByRefAccess.  Drop parameter.
5780         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
5781         warning.
5782         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
5783         InstanceExpression.
5784         * report.cs (AllWarnings): Add CS1690.
5785         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
5786         for ref access too.
5787         (LocalVariableReference.DoResolveBase): Update.
5788
5789 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5790
5791         * class.cs (MethodOrOperator): Moved common parts from method class.
5792         detect obsolete attributes.
5793         (Method.Define): Simplified as it reuses code from base.
5794         (Constructor.ValidAttributeTargets): Fixed issue found during
5795         refactoring.
5796         (Destructor.ValidAttributeTargets): Fixed issue found during
5797         refactoring.
5798         (Operator): Finished refactoring set off by #78020. Operator class is now
5799         ordinary method class.
5800
5801         * anonymous.cs: Updated.
5802
5803         * decl.cs (DeclSpace): Add IsGeneric
5804
5805 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5806
5807         * class.cs (Constructor.Emit): Don't emit the attributes twice.
5808
5809 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5810
5811         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
5812         detect obsolete attributes.
5813         (Method.CreateEmitContext): Moved to MethodOrOperator.
5814
5815 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5816
5817         A fix for #78048.
5818         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
5819         customized exception to make crash detection easier.
5820         (MethodOrOperator): Started to work on new base class for methods and
5821         operators.
5822         (Method): Derives from MethodOrOperator.
5823         (Constructor.Emit): Emits its own attributes.
5824         (AbstractPropertyEventMethod.Emit): Ditto.
5825         (Operator): Derives from MethodOrOperator, will refactor fully in extra
5826         patch.
5827         (Operator.Emit): It's temporary more tricky than should be.
5828         
5829         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
5830
5831         * report.cs (InternalErrorException): Add ctor with inner exception.
5832
5833 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
5834
5835         A fix for #76744.
5836         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
5837         only not visible.
5838
5839 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
5840
5841         A fix for #77916.
5842         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
5843         array.
5844
5845 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
5846
5847         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
5848         attribute is present and Guid not.
5849         (Interface.ApplyAttributeBuilder): Ditto.
5850
5851         * attribute.cs: Add error message.
5852
5853 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
5854
5855         A fix for #78020.
5856
5857         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
5858         sources (it's composite) so hold them in extra array as they are used in
5859         Emit phase only. It worked in the previous versions by mistake.
5860         (Attribute.Emit): Emit attribute for more owners when exist.
5861
5862         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
5863         it has now different behaviour.
5864
5865 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
5866
5867         * constant.cs (Constant.IsDefaultInitializer): New method.
5868
5869         * class.cs: Updated.
5870
5871         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
5872         re-initialize default values. It saves KBs almost for every assembly.
5873         Thanks Zoltan for the idea.
5874         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
5875         (ArrayCreation.DoResolve): Resolve only once.
5876         (ArrayCreation.Emit): Emit static initializer only when it is faster.
5877         (ArrayCreation.GetAttributableValue): Cope with optimized values.
5878
5879 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
5880
5881         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
5882         From #77961.
5883
5884 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
5885
5886         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
5887         in an embedded statement too.
5888
5889 2006-04-01  Raja R Harinath  <rharinath@novell.com>
5890
5891         Fix #77958
5892         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
5893
5894 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
5895
5896         A fix for #77966.
5897
5898         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
5899         was not specified.
5900
5901         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
5902
5903 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
5904
5905         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
5906         phase.
5907
5908         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
5909         LocalTemporary change.
5910
5911         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
5912         TypeContainer.
5913         (ClassOrStruct.DefineFieldInitializers): Implemented static field
5914         initializers optimization.
5915         (ClassOrStruct.TypeAttr): Moved from modifiers.
5916         (Constructor.CheckBase): Don't crash when static ctor has parameters.
5917         (FieldBase.ResolveInitializer): Resolves initializer.
5918         (FieldBase.HasDefaultInitializer): New property.
5919
5920         * cs-parser.jay: Removed message.
5921
5922         * expression.cs (CompilerGeneratedThis): New specialization.
5923
5924         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
5925
5926 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
5927
5928         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
5929
5930 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
5931
5932         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
5933         be now EnumConstants only.
5934
5935 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
5936
5937         * attribute.cs, driver.cs: Reset more caches.
5938
5939 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5940
5941         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
5942
5943 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5944
5945         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
5946         for easier reuse. Updated all overrides.
5947         (IntegralConstant): New base class for all integral constants.
5948         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
5949         of the constant range, report custom error.
5950         (UIntConstant.Reduce): Fixed uint conversion.
5951
5952         * ecore.cs, literal.cs: Reduce updates.
5953
5954 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5955
5956         A fix for #75813.
5957
5958         * class.cs (Constructor.Define): Removed extra if for default ctors.
5959         A patch from Atsushi Enomoto.
5960
5961 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5962
5963         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
5964         GetAttributableValue.
5965
5966         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
5967         when required.
5968
5969         * convert.cs (ImplicitConversionRequired): Error message moved to
5970         DoubleLiteral.
5971
5972         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
5973         automatic implicit conversion of an output value.
5974         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
5975
5976         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
5977         conversion.
5978         (TypeOf.GetAttributableValue): Add extra handling for object type.
5979
5980         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
5981         special error message.
5982
5983 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
5984
5985         * class.cs (Constructor.Emit): Don't crash when struct ctor is
5986         InternalCall.
5987         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
5988         compatible with MS runtime.
5989
5990 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
5991
5992         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
5993         attribute arguments here.
5994
5995         * class.cs (Indexer.Define): The check was moved to attribute class.
5996
5997 2006-03-22  Marek Safar  <marek.safar@seznam.cz>
5998
5999         * assign.cs, class.cs, codegen.cs, convert.cs, decl.cs, ecore.cs,
6000         expression.cs, typemanager.cs: Minor changes from gmcs to make merging
6001         easier.
6002
6003 2006-03-22  Raja R Harinath  <rharinath@novell.com>
6004
6005         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
6006         mcs to keep code differences small.
6007         * attribute.cs (Attribute.GetParameterDefaultValue): New.
6008         * typemanager.cs (parameter_default_value_attribute_type): New.
6009         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
6010         CS1908 check.
6011
6012 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
6013
6014         * expression.cs (StringConcat.Append): Reverted back to no warning state.
6015
6016 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
6017
6018         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
6019
6020         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
6021         the blocks too.
6022
6023 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
6024
6025         * doc-bootstrap.cs : fix build.
6026
6027 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
6028
6029         * expression.cs (StringConcat.Append): Issue a warning when empty string
6030         is going to append.
6031
6032 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
6033
6034         * assign.cs (CompoundAssign.ResolveSource): Removed.
6035
6036         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
6037         clean up.
6038
6039         * class.cs (TypeContainer.FindMethods): Removed.
6040         (TypeContainer.CheckMemberUsage): Made static.
6041
6042         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
6043
6044         * constant.cs (CheckRange): Removed unused type argument.
6045         (CheckUnsigned): Removed unused type argument.
6046
6047         * cs-parser.jay: Updated after MemberAccess clean up.
6048         Uses Length for empty string test.
6049
6050         * cs-tokenizer.cs: Uses Length for empty string test.
6051         (IsCastToken): Made static.
6052         (is_hex): Made static.
6053         (real_type_suffix): Made static.
6054
6055         * decl.cs (SetupCache): Made static.
6056         (OnGenerateDocComment): Removed unused ds argument.
6057
6058         * delegate.cs (VerifyDelegate): Removed unused argument.
6059
6060         * doc.cs: Uses Length for empty string test.
6061
6062         * driver.cs: Uses Length for empty string test.
6063
6064         * enum.cs (IsValidEnumType): Made static
6065
6066         * expression.cs (EnumLiftUp): Removed unused argument.
6067         (ResolveMethodGroup): Ditto.
6068         (BetterConversion): Ditto.
6069         (GetVarargsTypes): Ditto.
6070         (UpdateIndices): Ditto.
6071         (ValidateInitializers): Ditto.
6072         (MemberAccess.ctor): Ditto.
6073         (GetIndexersForType): Ditto.
6074
6075         * flowanalysis.cs: (MergeFinally): Removed unused argument.
6076
6077         * iterators.cs: Updated after MemberAccess clean up.
6078
6079         * location.cs: Uses Length for empty string test.
6080
6081         * namespace.cs: Uses Length for empty string test.
6082
6083          * report.cs (CheckWarningCode): Made static.
6084
6085         * statement.cs (LabeledStatement): Removed unused argument.
6086
6087         * typemanager.cs (FilterNone): Removed.
6088
6089 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
6090
6091         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
6092         obsolete.
6093
6094         * class.cs: Updated.
6095
6096 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
6097
6098         * cs-parser.jay.cs: __arglist is not allowed for delegates.
6099
6100 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
6101
6102         A fix for #77822.
6103
6104         * expression.cs (VerifyArgumentsCompat): Reverted to double error
6105         reporting, it's more tricky than I thought.
6106
6107 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
6108
6109         A fix for #77816.
6110
6111         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
6112         host container.
6113         (AnonymousMethod.ImplicitStandardConversionExists): New method.
6114         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
6115         Add more error reporting; Fixed issue with params.
6116
6117         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
6118
6119         * cs-parser.jay: AnonymousMethod requires host container.
6120
6121         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
6122
6123 2006-03-18  Raja R Harinath  <harinath@gmail.com>
6124
6125         * class.cs: Change 'TypeContainer ds' constructor argument to
6126         'DeclSpace parent'.  Some classes were missed below due to
6127         different naming convention.
6128
6129         * class.cs (MemberCore.Parent): Delete.  This makes the
6130         ParentContainer changes below enforceable by the compiler.
6131
6132         Treat pointers to enclosing declaration space as 'DeclSpace', not
6133         'TypeContainer'.
6134         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
6135         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
6136
6137         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
6138         of TypeContainer.
6139         (Block.AddThisVariable): Likewise.
6140         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
6141         (AbstractPropertyEventMethod.Emit): Likewise.
6142         (AbstractPropertyEventMethod.EmitMethod): Likewise.
6143         (GetMethod.Define, SetMethod.Define): Likewise.
6144         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
6145         (DelegateMethod.EmitMethod): Likewise.
6146
6147         Fix regression test-partial-13.cs.
6148         Rationalize use of PartialContainer.  Ensure that the partial
6149         class semantics can be tied to type-correctness, i.e., any
6150         violation will cause a compile error.
6151         * class.cs, const.cs: Access all fields that belong to class
6152         TypeContainer via ParentContainer.  Arguments of EmitContexts and
6153         Resolve()-like functions still use 'Parent'.
6154
6155         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
6156         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
6157         (PropertyMethod.CheckModifiers): Remove unused argument.
6158         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
6159         DeclSpace.
6160
6161 2006-03-17  Raja R Harinath  <harinath@gmail.com>
6162
6163         Make semantics of PartialContainer simpler.
6164         * decl.cs (DeclSpace.IsPartial): Remove.
6165         * class.cs (TypeContainer.IsPartial): Likewise.
6166         (TypeContainer..ctor): Set PartialContainer to point to self.
6167         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
6168         (TypeContainer.FindNestedType): Likewise.
6169         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
6170
6171 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
6172
6173         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
6174
6175 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
6176
6177         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
6178         classes.
6179
6180 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
6181
6182         * class.cs (Operator.Define): An error for base conversion was not
6183         reported correctly.
6184
6185 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
6186
6187         * iterator.cs : yield break is allowed in try statement which has
6188           catch clauses. Fixed bug #77767.
6189
6190 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
6191
6192         A fix for #77593, #77574.
6193
6194         * class.cs (MethodCore.CheckBase): Another if for operator.
6195
6196 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
6197
6198         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
6199         were not resolved
6200
6201         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
6202         (DelegateCreation.ImplicitStandardConversionExists): New method for just
6203         conversion test.
6204         
6205         *ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
6206         not needed.
6207
6208         * assign.cs, constant.cs, convert.cs, delegate.cs, expression.cs:
6209         Updated after another emitcontext usage was clean up. It should help us to
6210         synchronize with gmcs easier.
6211
6212 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
6213
6214         A fix for #77353.
6215
6216         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
6217         (Event.Define): ditto
6218         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
6219
6220         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
6221         Removed redundant code and set NewSlot for Invoke method too.
6222
6223         * parameter.cs (Parameters.ctor): Add custom, type ctor.
6224         (Parameters.MergeGenerated): New method. Use this method when you merge
6225         compiler generated argument with user arguments.
6226
6227 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
6228
6229         * attribute.cs (ResolveAsTypeTerminal): Removed.
6230
6231         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
6232         specialization for predefined types; 30% speed up.
6233         Finally placed obsolete check to right place.
6234         (Expression.ResolveType): Removed.
6235
6236         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
6237         Updated after ResolveType was removed.
6238
6239         * expression.cs (Cast.ctor): Check void cast.
6240         (Binary.ResolveAsTypeTerminal): Is never type.
6241         (Conditional.ResolveAsTypeTerminal): Is never type.
6242
6243         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
6244
6245 2006-03-01  Raja R Harinath  <rharinath@novell.com>
6246
6247         Fix #77679.
6248         * expression.cs (ParameterReference.DoResolveBase): Change return
6249         type to bool.
6250         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
6251         Update.
6252
6253         Fix #77628.
6254         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
6255
6256         Fix #77642.
6257         * typemanager.cs (GetFullNameSignature): Don't nullref on
6258         protected accessors.
6259
6260 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
6261
6262         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
6263         these two separated members to simplify the code.
6264         (Attribute.Resolve): Refactored to use new fields and methods.
6265         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
6266         implemented obsolete attribute checking.
6267         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
6268         implemented obsolete checking again. It look line never ending quest ;-)
6269         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
6270
6271         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
6272
6273         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
6274
6275         *class.cs (Property.Define): Add RegisterProperty call.
6276
6277         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
6278         argument groups (only 2).
6279
6280         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
6281         encoding expression to arguments.
6282         (Expression.ExprClassToResolveFlags): Just turned to property.
6283
6284         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
6285         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
6286         optimized as well as implemented support for zero-length attributes.
6287
6288         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
6289         Add caching of PropertyInfo's.
6290
6291 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
6292
6293         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
6294         error multiple times.
6295
6296 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
6297
6298         New partial class implementation.
6299         A fix for #77027, #77029, #77403
6300
6301         * attribute.cs (Attributable): Made attributes protected.
6302
6303         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
6304         the replacements of ClassPart and PartialContainer.
6305         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
6306         (TypeContainer.AddInterface): Ditto.
6307         (TypeContainer.AddPartial): The main method for partial classes. It checks
6308         for errors and merges ModFlags and attributes. At the end class is added to
6309         partial_parts list.
6310         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
6311         required here.
6312         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
6313         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
6314         from the rest of partial classes.
6315         (TypeContainer.GetClassBases): Simplified.
6316         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
6317         DefineType.
6318         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
6319         (TypeContainer.HasExplicitLayout): Uses Flags now.
6320         (PartialContainer): Removed.
6321         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
6322         (StaticClass): Was merged with Class.
6323         (Class.GetClassBases): class and static class bases are verified here.
6324         (Class.TypeAttr): Added static attributes when class is static.
6325         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
6326         (MemberBase): In some cases we need to call parent container for partial
6327         class. It should be eliminated but it's not easy now.
6328
6329         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
6330
6331         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
6332         partial classed to accumulate class comments.
6333         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
6334
6335         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
6336
6337         * driver.cs (MainDriver): Tree.GetDecl was removed.
6338
6339         * modifiers.cs (Modifiers): Add partial modifier.
6340
6341         * tree.cs (Tree.decl): Removed.
6342         (RootTypes): Started to use this class more often for root types
6343         specializations.
6344
6345 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
6346
6347         A fix for #77615
6348
6349         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
6350         external interface does not have an attribute.
6351
6352 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
6353
6354         Another prerequisites for new partial classs implementation.
6355         
6356         * attribute.cs (Attribute.Equal): Implemented.
6357         (Attribute.Emit): Changed as attributes can be applied more than twice.
6358         (Attributes.Emit): Check for duplicate attributes here.
6359
6360         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
6361         as a parameter, clean-up.
6362
6363 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
6364
6365         A fix for #77485
6366
6367         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
6368         contains obsolete attribute check which can in some cases look for base
6369         type of current class which is not initialized yet.
6370         (TypeContainer.BaseType): Replacement of ptype.
6371
6372         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
6373
6374 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
6375
6376         First of prerequisites for new partial classs implemention.
6377         
6378         * attribute.cs (Attributable): Extended by ResolveContext;
6379         Attributes finally have correct context for resolving in all cases.
6380         (AttachTo): Attribute owner is assigned here.
6381
6382         * codegen.cs (IResolveContext): Introduce new interface to hold
6383         all information needed in resolving phase.
6384         (EmitContext): Implements IResolveContext; more clean-up needed here.
6385         
6386         * decl.cs (MemberCore): Implemented IResolveContext.
6387
6388         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
6389         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
6390         parameter.cs, statement.cs, tree.cs, typemanager.cs:
6391         Refactored to use new IResolveContext instead of EmitContext; cleanup
6392
6393 2006-02-06  Miguel de Icaza  <miguel@novell.com>
6394
6395         * codegen.cs (EmitScopeInitFromBlock): check here the
6396         capture_context, there is no need to make two calls to the
6397         EmitContext. 
6398
6399         * anonymous.cs: Add some debugging messages that might help me
6400         track other instances of this problem in the future (the
6401         regression of test 467).
6402
6403         * cs-parser.jay: track the variable block, as we need to initalize
6404         any captured variables declared in this block for the "catch"
6405         portion of the "Try" statement.
6406
6407         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
6408         scope initialization for captured variables. 
6409
6410         Also, move the emit for the variables after the block location has
6411         been marked.
6412
6413 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
6414
6415         * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
6416
6417 2006-02-02  Miguel de Icaza  <miguel@novell.com>
6418
6419         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
6420         commit yesterday, the initialization for the roots is necessary.
6421         What is not necessary is the scope activation.
6422
6423 2006-02-02  Raja R Harinath  <rharinath@novell.com>
6424
6425         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
6426         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
6427         CS0206 checks.
6428         (Argument.Resolve): Remove CS0206 checks.
6429
6430 2006-02-01  Miguel de Icaza  <miguel@novell.com>
6431
6432         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
6433         scopes for all the roots, the scopes will now be emitted when the
6434         Blocks are entered.   [This change was wrong, fixed on 2006-02-02]
6435
6436         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
6437         code.  This reduces a lot of existing cruft.
6438         
6439         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
6440         that the ScopeInfo is generated as we enter the scope, not at the
6441         time of use, which is what we used to do before.
6442
6443         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
6444         every time a Block is about to be emitted if we have a
6445         CaptureContext. 
6446
6447 2006-02-01  Raja R Harinath  <rharinath@novell.com>
6448
6449         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
6450         (Reset): Update.
6451         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
6452
6453         * typemanager.cs (cons_param_array_attribute): Make private.
6454         (Reset): Set it to null.
6455         (InitCoreHelpers): Don't initialize it.
6456         (ConsParamArrayAttribute): New.  Initialize it as needed.
6457         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
6458
6459 2006-01-31  Miguel de Icaza  <miguel@novell.com>
6460
6461         * expression.cs: There might be errors reported during the
6462         selection of applicable methods.  If there are errors, do not
6463         continue execution as it will lead the compiler to crash.
6464
6465 2006-01-30  Miguel de Icaza  <miguel@novell.com>
6466
6467         * expression.cs: Member access is not allowed on anonymous
6468         methods.  Fixes #77402.
6469
6470 2006-01-30  Raja R Harinath  <rharinath@novell.com>
6471
6472         Fix #77401
6473         * cs-parser.jay (VariableDeclaration): Don't set
6474         current_array_type to null.
6475         (field_declaration, event_declaration, declaration_statement):
6476         Set it to null here.
6477
6478 2006-01-28  Raja R Harinath  <harinath@gmail.com>
6479
6480         * typemanager.cs (GenericParameterPosition): New.
6481         * doc.cs: Use it.
6482
6483 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
6484
6485         * doc.cs : To process "include" elements, first we should create
6486           another list than XmlNodeList, because it could result in node
6487           removal, which could result in that the XmlNodeList gives up
6488           yielding next node.
6489
6490           (Also made code identical to gmcs again.)
6491
6492 2006-01-25  Miguel de Icaza  <miguel@novell.com>
6493
6494         * ecore.cs: Introduce an error report that we were not catching
6495         before, if not silent, we must report the error.  Gonzalo ran into
6496         it.
6497
6498 2006-01-23  Miguel de Icaza  <miguel@novell.com>
6499
6500         A fix for bug: #76957
6501         
6502         * iterators.cs (MoveNextMethod.CreateMethodHost): call
6503         ComputeMethodHost before creating the method, this is a new
6504         requirement. 
6505
6506         * anonymous.cs (AnonymousContainer): Now we track all the scopes
6507         that this method references (RegisterScope).  The actual scope
6508         where the method is hosted is computed with the ComputeMethodHost
6509         before we create the method.
6510
6511         Moved the Deepest routine here.
6512
6513         (AnonymousContainer.ComputeMethodHost): New routine used to
6514         compute the proper ScopeInfo that will host the anonymous method.
6515
6516         (ScopeInfo): Deal with multiple roots.  The problem was that we
6517         did not have a unique root where all ScopeInfos could be hanged
6518         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
6519         of roots.  
6520
6521         Remove AdjustMethodScope which is now computed at the end.  Remove
6522         LinkScope which did a partial link, instead link all ScopeInfos
6523         before code generation from the new "LinkScopes" routine. 
6524
6525         Simplify all the Add* routines as they no longer need to maintain
6526         the tree, they just need to record that they are using variables
6527         from a ScopeInfo.
6528
6529         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
6530         routines to produce the forest of ScopeInfo trees.
6531
6532         * class.cs (TypeContainer.AppendMethod): This is just like
6533         AddMethod, but ensures that an interface implementation method
6534         (IEnumerable.XXX) is not inserted at the beginning of the queue of
6535         methods, but at the end.
6536
6537         We use this functionality to ensure that the generated MoveNext
6538         method in the iterator class is resolved/emitted before the
6539         enumerator methods created.   
6540
6541         This is required because the MoveNext method computes the right
6542         ScopeInfo for the method.  And the other methods will eventually
6543         need to resolve and fetch information computed from the anonymous
6544         method. 
6545
6546 2006-01-21  Raja R Harinath  <harinath@gmail.com>
6547             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
6548
6549         Fix rest of #76995.
6550         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
6551         the 'aliases' hash.
6552         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
6553         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
6554
6555 2006-01-18  Raja R Harinath  <rharinath@novell.com>
6556
6557         Fix #76656, cs0231-2.cs.
6558         * cs-parser.jay (formal_parameter_list): Make error case catch
6559         more issues.
6560         (parenthesized_expression_0): Add CS1026 check.
6561         (invocation_expression): Remove unused { $$ = lexer.Location }.
6562
6563 2006-01-17  Raja R Harinath  <rharinath@novell.com>
6564
6565         Fix #76824.
6566         * cs-parser.jay (statement_expression): Don't list out the
6567         individual statement-expressions.  Convert syntax error into
6568         CS0201 check.
6569
6570 2006-01-16  Raja R Harinath  <rharinath@novell.com>
6571
6572         Fix #76874.
6573         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
6574         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
6575         CheckIntermediateModification.
6576         (FieldExpr.DoResolve): Add new two-argument version that
6577         allows us to resolve the InstanceExpression as an lvalue.
6578         The one-argument variant is now just a wrapper.
6579         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
6580         Resolve the lhs as an lvalue if the it has a value type.
6581         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
6582         from Assign.DoResolve.
6583         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
6584         resolved as an lvalue.
6585         (PropertyExpr.DoResolve): Update.
6586         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
6587         has a value type.  Move CS1612 check here from
6588         CheckIntermediateModification.
6589         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
6590         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
6591         'right_side' of a ResolveLValue on an 'out' argument.
6592         (EmptyExpression.LValueMemberAccess): New.  Used as the
6593         'right_side' of a propagated ResolveLValue on a value type.
6594         (LocalVariableReference.DoResolveBase): Recognize
6595         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
6596         Add CS1654 check.
6597         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
6598         EmptyExpression.Null.
6599
6600 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
6601
6602         * typemanager.cs : added IsGenericParameter(). In mcs it always
6603           return false.
6604         * doc.cs : for generic parameters, use GenericParameterPosition,
6605           not FullName.
6606
6607 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
6608
6609         * expression.cs: Fix Console.WriteLine ((this = x).foo);
6610
6611 2006-01-12  Miguel de Icaza  <miguel@novell.com>
6612
6613         This fixes the problem where we used ldfld instead of ldflda to
6614         load the "THIS" pointer on captured parameters, when THIS is a
6615         value type.  See bug #77205.
6616         
6617         * iterators.cs (CapturedThisReference.Emit): Pass false to
6618         EmitThis (we do not need the address).
6619
6620         * codegen.cs (EmitThis): it needs to know whether we need the
6621         address of `this' or not.  This is used by value types.  
6622
6623         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
6624         every other call passes false.
6625
6626 2006-01-12  Raja R Harinath  <rharinath@novell.com>
6627
6628         Fix #77221.
6629         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
6630         GetOverride.
6631         * expression.cs (Invocation.OverloadResolve): Update.
6632         (Invocation.DoResolve): Avoid double resolution of invocation.
6633
6634 2006-01-11  Raja R Harinath  <rharinath@novell.com>
6635
6636         Fix #77180.
6637         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
6638         unary negation of floating point types as 0-expr; negation cannot
6639         overflow in floating point types.
6640
6641         Fix #77204.
6642         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
6643         on operands of 'void' type.
6644
6645         Fix #77200.
6646         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
6647         and ExclusiveOr for boolean constants too.
6648
6649 2006-01-09  Raja R Harinath  <rharinath@novell.com>
6650
6651         Fix #75636.
6652         * expression.cs (Invocation.OverloadResolve): Replace reflected
6653         override methods with their base virtual methods, rather than
6654         skipping over them.
6655         * typemanager.cs (TypeManager.GetOverride): New.
6656
6657 2006-01-05  Jb Evain  <jbevain@gmail.com>
6658
6659         * class.cs (Property.Define, Indexer.Define): do not tag the
6660         properties as SpecialName | RTSpecialName.
6661
6662 2006-01-04  Miguel de Icaza  <miguel@novell.com>
6663
6664         * class.cs (MethodCore.IsDuplicateImplementation): This method was
6665         doing a low-level comparission of parameter types.  It was lacking
6666         a check for __argslist. 
6667
6668 2005-12-30  Miguel de Icaza  <miguel@novell.com>
6669
6670         * expression.cs (ParameterReference.DoResolveBase): Allow
6671         reference parameters if they are local to this block. 
6672
6673         This allows the ref and out parameters of a delegate to be used in
6674         an anonymous method, for example:
6675
6676         delegate void set (out int x);
6677
6678         set s = delegate (out int x){
6679                 x = 0;
6680         };
6681
6682         This is used by functionality introduced late in the C# language.
6683         
6684         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
6685         method that take ref and out parameters. 
6686
6687         Fixes #77119 which was a late change in the spec.
6688
6689 2005-12-23  Miguel de Icaza  <miguel@novell.com>
6690
6691         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
6692         parent if its the same scope.  Fixes #77060.
6693
6694 2005-12-21  Miguel de Icaza  <miguel@novell.com>
6695
6696         * driver.cs: Report the case of no source files and no -out:
6697         argument provided.
6698
6699 2005-12-20  Raja R Harinath  <rharinath@novell.com>
6700
6701         Fix #77035.
6702         * expression.cs (ComposedCast.GetSignatureForError): Define.
6703
6704 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
6705
6706         Fix #76995
6707
6708         * namespace.cs (NamespaceEntry): Add extern_aliases as a
6709         ListDictionary, to contain the ExternAliasEntry entries (in
6710         addition to the NamespaceEntry.aliases hashtable). This field is
6711         shared between the original entry and its doppelganger (bodyless 
6712         copy of it).
6713         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
6714         extern_aliases field.
6715         (NamespaceEntry.Lookup): Move the IsImplicit check after the
6716         lookup in extern_aliases.
6717
6718 2005-12-16  Raja R Harinath  <rharinath@novell.com>
6719
6720         Fix #77006.
6721         * class.cs (TypeContainer.Mark_HasEquals): New.
6722         (TypeContainer.Mark_HasGetHashCode): New.
6723         (ClassPart): Override them.
6724         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
6725
6726         Fix #77008.
6727         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
6728         'parent' argument to the base constructor.
6729
6730         Remove all mention of TypeContainer from decl.cs.
6731         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
6732         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
6733         (DeclSpace.DeclSpace): Likewise.
6734         (DeclSpace.DefineMembers): Remove unused argument.
6735         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
6736         debugging check -- we don't care if the debug code throws an
6737         InvalidCastException instead of an InternalErrorException.
6738         * class.cs (TypeContainer.DefineMembers): Update to changes.
6739         (TypeContainer.DoDefineMembers): Likewise.
6740         (TypeContainer.GetMethods): Likewise.
6741         (PropertyMember.Define): Likewise.
6742         (MemberBase.Parent): New property that forwards to
6743         MemberCore.Parent, but ensures that we get a TypeContainer.
6744         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
6745         (RootContext.PopulateTypes): Likewise.  Remove special case code
6746         for !RootContext.StdLib: DefineMembers is idempotent.
6747
6748 2005-12-14  Miguel de Icaza  <miguel@novell.com>
6749
6750         * convert.cs (ExplicitConversionCore): Check the return value from
6751         ExplicitConversionCore which can return null on failure.  Fixes #76914
6752
6753 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
6754
6755         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
6756
6757 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
6758
6759         * doc.cs : The search for referenced namespace was insufficient to
6760           get global one as it used to do. Fixed bug #76965.
6761
6762 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
6763
6764         * doc.cs : check name in cref in the last phase that whether it is
6765           namespace or not.
6766
6767 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
6768
6769         * cs-tokenizer.cs : reverted the latest change: it somehow broke
6770           Mono.C5.
6771
6772 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
6773
6774         * doc.cs : so it turned out that we cannot skip override check for 
6775           interface members. Fixed bug #76954.
6776
6777 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
6778
6779         * cs-tokenizer.cs : fixed bug #75984:
6780           - #warning and #error should not be handled when the source line
6781             is disabled.
6782           - #line is not checked strictly when the source line is disabled.
6783           - #define and #undef is on the other hand checked strictly at any
6784             state.
6785
6786 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
6787
6788         * cs-tokenizer.cs : missing Location (actually, filename) in one of
6789           CS1027 report.
6790
6791 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
6792
6793         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
6794
6795         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
6796         event initializers.
6797         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
6798         (FieldBase.Initializer): Initializer is now optional.
6799         (EventField.Define): Only event field can have initializer.
6800
6801         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
6802
6803         * const.cs (Const): Reuse initializer.
6804
6805         * cs-parser.jay: Updated after FieldBase changes.
6806         Added current_array_type to simplify array initializers.
6807
6808         * ecore.cs (NullCast.IsDefaultValue): Implemented.
6809
6810         * expression.cs, iterators.cs: Updated.
6811
6812         * namespace.cs (NamespaceEntry): Made UsingFound private.
6813
6814 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
6815
6816         * parameterCollection.cs: Obsolete, removed.
6817         * parser.cs: Obsolete, removed.
6818
6819 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
6820
6821         Fix #76849.
6822         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
6823
6824         * enum.cs (Enum.Define): Set obsolete context here.
6825
6826 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
6827
6828         * doc.cs :
6829           - FindDocumentedMember() now expects 1) paramList as null
6830             when "we don't have to check the number of parameters" and
6831             2) Type.EmptyTypes when "there is no arguments".
6832           - Introduced FoundMember struct to hold the exact type which was
6833             used to find the documented member (the above change broke
6834             test-xml-044; it might be better just to use DeclaringType than
6835             what MS does, like this change does, but it depends on usage.)
6836
6837 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
6838
6839         * doc.cs : documented member might be from DeclaringType for nested
6840           types. Fixed bug #76782.
6841
6842 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
6843
6844         * anonymous.cs: Have the param code handle leaving copies on the
6845         stack etc. Allows anonymous params to take part in the assignment
6846         code (++, +=, etc). Fixes bug #76550
6847
6848         * expression.cs: Handle the prepare_for_load/leave_copy by passing
6849         it down to the anon code.
6850
6851         * iterators.cs: Use dummy var here
6852
6853         * codegen.cs: Handle new vars
6854
6855 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
6856
6857         Fix #76849.
6858         * class.cs (MethodData.Define): Set proper Obsolete context.
6859
6860         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
6861         obsolete context.
6862         (FieldExpr.DoResolve): Ditto.
6863
6864 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
6865
6866         Fix #76849.
6867         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
6868         parent is not obsolete.
6869
6870 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
6871
6872         * doc.cs : (FindDocumentedMember) find parameterless members first
6873           and get CS0419 in the early stage. Fixed first case of bug #76727.
6874
6875 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
6876
6877         Fix #76859.
6878         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
6879         no error was reported.
6880
6881         *expression.cs (Binary.DoResolve): left can be null.
6882
6883 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
6884
6885         Fix #76783.
6886         * class.cs (MethodData.Emit): Parameters should be labeled first.
6887
6888 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
6889
6890         Fix #76761.
6891         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
6892
6893 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
6894
6895         * attribute.cs (AreParametersCompliant): Moved to Parameter.
6896
6897         * class.cs (MethodCore): Parameter clean up.
6898         (IMethodData): Added ParameterInfo.
6899         (MethodData): Parameter clean up.
6900         (Indexer.Define): Parameter clean up.
6901
6902         * anonymous.cs,
6903         * codegen.cs,
6904         * cs-parser.jay,
6905         * decl.cs,
6906         * doc.cs,
6907         * ecore.cs,
6908         * flowanalysis.cs,
6909         * iterators.cs,
6910         * pending.cs,
6911         * statement.cs,
6912         * typemanager.cs: Parameter clean up.
6913
6914         * delegate.cs (Define): Get rid of duplicated code.
6915
6916         * expression.cs (ParameterReference): Removed useless parameters
6917         and simplified.
6918         (Invocation): Ditto.
6919
6920         * parameter.cs (ParamsParameter): New class, params specialization.
6921         (ArglistParameter): Attemp to separate arglist.
6922         (Parameter): Refactored to be reusable and faster.
6923         (Parameter.Modifier): Made understandable.
6924         (Parameters): Changed to be used as a class for `this' assembly
6925         parameters. Refactored to use new specialized classes.
6926
6927         * support.cs (ParameterData): Added Types property.
6928         (InternalParameters): Deleted.
6929
6930 2005-08-20  Martin Baulig  <martin@ximian.com>
6931
6932         Merging this patch from GMCS to fix #75867.
6933
6934         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
6935         scope if we don't already have it.
6936
6937 2005-11-17  Martin Baulig  <martin@ximian.com>
6938
6939         * anonymous.cs
6940         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
6941         inherit the scope from our parent.  Fixes #76653.
6942
6943 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
6944
6945         * doc.cs : the previous patch does not actually fix the bug.
6946           PropertyInfo override check is now implemented and really fixed it.
6947         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
6948
6949 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
6950
6951         * doc.cs : apply "override filter" also to properties.
6952           Fixed bug #76730.
6953
6954 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
6955
6956         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
6957           no need to check overrides. For classes, omit those results from 
6958           interfaces since they must exist in the class. Fixed bug #76726.
6959
6960 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
6961
6962         * typemanager.cs : (GetFullNameSignature) differentiate indexers
6963           with different parameters. Fixed the second problem in #76685.
6964
6965 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
6966
6967         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
6968           get expected 'protected' access in CheckValidFamilyAccess()).
6969           Fixed bug #76692.
6970
6971 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
6972
6973         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
6974           Fixed bug #76705.  CS1569 was incorrectly commented out.
6975
6976 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
6977
6978         * doc.cs : use Invocation.IsOverride() to do real override check.
6979         * expression.cs : made Invocation.IsOverride() internal.
6980
6981 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
6982
6983         * doc.cs : use TypeManager.FindMembers() instead of (possible)
6984           TypeBuilder.FindMembers() and filter overriden base members out.
6985           Fixed bug #76990.
6986
6987 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6988
6989         * doc.cs : ref/out parameters are represented as '@' (instead of
6990           '&' in type FullName). Fixed bug #76630 (additionally crefs).
6991
6992 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6993
6994         * doc.cs : when there was no '.' in cref to methods in doc comment,
6995           then parameters were missing in the output. Fixed bug #76691.
6996
6997 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6998
6999         * driver.cs : don't output docs when there is an error.
7000           Fixed bug #76693.
7001
7002 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
7003
7004         * doc.cs :
7005           Now it should detect indexers. Fixed primary concern in bug #76685.
7006           Fixed CS0419 message to not show the identical member signature in
7007           the message.
7008
7009 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
7010
7011         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
7012           instead of Type.FindMembers() since it does not handle events.
7013           Fixed bug #71604.
7014
7015 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
7016
7017         * codegen.cs: Fixed typo (speficied -> specified).
7018
7019 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
7020
7021         Fix #76369.
7022         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
7023
7024 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
7025
7026         * attribute.cs: Changed error message.
7027
7028         * cs-tokenizer.cs: One more check.
7029
7030 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
7031
7032         * statement.cs (Block.Resolve): Ignore empty statement.
7033
7034 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
7035
7036         * report.cs: Made error/warning methods more strict to avoid
7037         their misuse.
7038
7039         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
7040         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
7041         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
7042         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
7043
7044 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
7045
7046         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
7047         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
7048
7049         * class.cs (TypeContainer.IsComImport): New property.
7050         (Constructor.Define): Create proper ctor for ComImport types.
7051
7052         * expression.cs (New.CheckComImport): Fixed.
7053
7054 2005-11-07  Miguel de Icaza  <miguel@novell.com>
7055
7056         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
7057         that a parameter has been captured does not mean that we do not
7058         have to do the rest of the processing.  This fixes the second part
7059         of #76592.  If there was another anonymous method capturing
7060         values in the past, the Scope would never be set for the second
7061         method that captured the same parameter.
7062
7063         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
7064         properly manipulate the stack.   Second part of fix for #76592.
7065
7066         * expression.cs (New): Add support for invoking "new" on
7067         interfaces that have been flagged with the ComImport attribute and
7068         the CoClass.  Fixes #76637 
7069
7070         * statement.cs (Try.DoEmit): When a variable is captured, do not
7071         try to emit the vi.LocalBuilder variable as it has been captured.
7072         Create a temporary variable and store the results on the
7073         FieldBuilder.  Fixes #76642
7074
7075 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
7076
7077         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
7078
7079         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
7080
7081         * expression.cs (Binary.DoResolve): Added && optimalization.
7082     
7083         * typemanager.cs (AddUserType): Removed useless argument.
7084
7085 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
7086
7087         * statement.cs (Block.variables): Uses ListDictionary.
7088
7089 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
7090
7091         Fix #75969.
7092         * class.cs (PartialContainer.EmitType): Customized to emit
7093         security attributes.
7094         (ClassPart.ApplyAttributeBuilder): Transform security attribute
7095         for partial classes.
7096
7097 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
7098
7099         Fix #76599.
7100         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
7101         access has to be fixed.
7102         
7103         * typemanager.cs (IsUnmanagedType): Wrong common field type.
7104
7105 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
7106
7107         Fix #76590.
7108         * ecore.cs (NullCast.Reduce): Implemented.
7109
7110         * expression.cs (ArrayCreation.CheckIndices): Correcly check
7111         constant type.
7112         
7113         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
7114         properly.
7115         (Foreach.Resolve): Catch null properly.
7116
7117 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
7118  
7119         * cs-tokenizer.cs: Warning text fix.
7120
7121         * driver.cs: AllWarningNumbers exposed on public interface.
7122
7123         * report.cs (): Reviewed warning numbers.
7124         (IsValidWarning): Use binary search.
7125
7126 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
7127  
7128         * driver.cs: Implemeted resource visibility.
7129         (Resources): New class for code sharing between /res: and
7130         /linkres:
7131  
7132 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
7133
7134         Fix #76568.
7135         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
7136         folding.
7137         
7138         * convert (Convert.ImplicitReferenceConversion): NullCast holds
7139         contants only.
7140         
7141         * ecore.cs (NullCast): Child is contant only.
7142         
7143         * literal.cs (NullLiteral.Reduce): null can be converted to any
7144         reference type.
7145
7146 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
7147
7148         * driver.cs: Use Encoding.Default as default code page instead
7149           of ISO-28591.
7150
7151 2005-10-27  Raja R Harinath  <rharinath@novell.com>
7152
7153         Fix #76085.
7154         * expression.cs (Invocation.Error_InvalidArguments): Handle
7155         __arglist parameters.
7156         (Invocation.VerifyArgumentsCompat): Likewise.
7157         * support.cs (ReflectionParameters.GetSignatureForError): Print
7158         __arglist parameters.
7159         (InternalParamters.GetSignatureForError): Likewise.
7160         * parameter.cs (Parameters.GetSignatureForError): Likewise.
7161
7162 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
7163
7164         * attribute.cs (GetPropertyValue): Made public.
7165
7166         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
7167         Resolve.
7168         Add new property WrapNonExceptionThrows to handle 2.0 assembly
7169         attribute.
7170         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
7171         is not defined.
7172         
7173         * driver.cs: Reflect method name change.
7174         
7175         * statement.cs (Try.Resolve): Warn when try has both general
7176         exception handlers.
7177         
7178         * typemanager.cs: runtime_compatibility_attr_type new predefined
7179         type.
7180
7181 2005-10-26  Raja R Harinath  <harinath@gmail.com>
7182
7183         Fix #76419.
7184         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
7185         treat it as an empty parameter list.
7186
7187 2005-10-26  Raja R Harinath  <rharinath@novell.com>
7188
7189         Fix #76271.     
7190         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
7191         ResolveAsTypeStep silent.
7192         * statement.cs (Block.AddConstant): Mark block as used.
7193         (Block.ResolveMeta): Avoid piling on error messages
7194         if a constant initializer resolution fails.
7195
7196 2005-10-25  Raja R Harinath  <rharinath@novell.com>
7197
7198         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
7199         Remove.
7200         (NamespaceEntry.VerifyAllUsing): New.
7201         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
7202         behaviour.  Delegates actual resolution of alias to ...
7203         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
7204         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
7205         Update.
7206         * driver.cs (Driver.MainDriver): Update.
7207         
7208         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
7209         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
7210         property.
7211         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
7212         Remove.
7213         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
7214         RootNamespace.DefineNamespacesForAll.
7215
7216 2005-10-24  Raja R Harinath  <harinath@gmail.com>
7217
7218         * typemanager.cs (assemblies, external_aliases, modules)
7219         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
7220         (ComputeNamespaces, GetRootNamespace): Remove extra staging
7221         overhead.  Move resposibility ...
7222         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
7223         * driver.cs, attribute.cs, codegen.cs: Update to changes.
7224
7225 2005-10-23  Raja R Harinath  <harinath@gmail.com>
7226
7227         * namespace.cs (RootNamespace.all_namespaces): Renamed from
7228         cached_namespaces.  Improve usage.
7229         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
7230         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
7231         Move from GlobalRootNamespace and simplify.
7232         (RootNamespace.Global): Make instance variable.
7233         (RootNamespace.RootNamespace): Add "alias name" parameter.
7234         (GlobalRootNamespace): Simplify drastically.
7235         (Namespace.Lookup): Don't use GetNamespace.
7236         * typemanager.cs (GetRootNamespace): Rename from
7237         ComputeNamespaceForAlias.
7238         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
7239
7240 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
7241
7242         * anonymous.cs (AnonymousContainer): Don't crash when container
7243         doesn't exist.
7244
7245 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
7246
7247         * expression.cs (Binary.DoResolve): Warn when comparing same
7248         values.
7249
7250 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
7251
7252         Fix #76486.
7253         * expression.cs (Binary.DoResolve): It looks like there are no
7254         convetsion rules in enum context.
7255
7256 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
7257
7258         Add support for extern alias qualifiers.
7259         * typemanager.cs: Move some LookupTypeReflection code
7260         to namespace.cs, to have cleaner code. Added some methods
7261         to help us keep track of the extern aliased references.
7262         * driver.cs: Add suport for extern alias assemblies on command
7263         line and check for their warnings/errors. Also keep track of the
7264         extern aliased assemblies.
7265         * namespace.cs: Move the global functionality of Namespace
7266         to GlobalRootNamespace/RootNamespace. Now the global namespace
7267         is GlobalRootNamespace.Globa. Also the code moved from 
7268         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
7269         Finally added LocalAliasEntry (AliasEntry before) and
7270         ExternAliasEntry, to handle alias statements.
7271         * cs-parser.jay: Add support in the grammar for extern alias
7272         statement.
7273         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
7274         Update callings to Namespace (now in GlobalRootNamespace).
7275
7276 2005-10-18  Raja R Harinath  <rharinath@novell.com>
7277
7278         Fix #76371.
7279         * class.cs (TypeContainer.DefineType): Move updating of
7280         topological sort earlier in the code.
7281         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
7282
7283 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
7284
7285         Fix #76273.
7286         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
7287         
7288         * constant.cs (Constant.TryReduce): Moved from Cast class.
7289         (Reduce): Made little bit more OO and fixed missing conversions.
7290         
7291         * ecore.cs (Reduce): Implemented.
7292         (Binary.EnumLiftUp): New method to upgrade values to enum values.
7293         
7294         * literal.cs (Reduce): Implemented.
7295         
7296         * class.cs: Reverted Miguel's wrong commit.
7297
7298 2005-10-14  Miguel de Icaza  <miguel@novell.com>
7299
7300         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
7301
7302 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
7303
7304         * cs-parser.jay, expression.cs : CS0214 was missing error location
7305           for constants. Fixed bug #76404.
7306
7307 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
7308
7309         Fix #76370.
7310         * convert.cs (ExplicitConversionCore): Fixed object->enum
7311         conversion.
7312
7313 2005-10-10  Raja R Harinath  <rharinath@novell.com>
7314
7315         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
7316         InstanceExpression.
7317         (PropertyExpr.EmitCall): Likewise.
7318         * expression.cs (Invocation.EmitArguments): Handle case where
7319         arguments == null.
7320         (Invocation.EmitCall): Avoid allocating temporary variable if
7321         there are no arguments.
7322
7323 2005-10-07  Raja R Harinath  <rharinath@novell.com>
7324
7325         Fix #76323.
7326         * convert.cs (ImplicitConversionStandard): Move conversion of
7327         void* to arbitrary pointer types ...
7328         (ExplicitConversionStandard): .. here.
7329         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
7330         error to always print typenames.
7331
7332 2005-10-07  Raja R Harinath  <rharinath@novell.com>
7333
7334         * convert.cs (GetConversionOperator): Rename from
7335         GetConversionOperators.  Move operator selection code from ...
7336         (UserDefinedConversion): ... here.
7337
7338 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
7339
7340         * convert.cs (ExplicitConversionCore): Removed duplicate enum
7341         conversion.
7342
7343 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
7344
7345         * assign.cs (Assign.DoResolve): Error method changed.
7346
7347         * cfold.cs (DoConstantNumericPromotions): Error method changed.
7348         
7349         * const.cs (ResolveValue): Reset in_transit immediately.
7350         
7351         * constant.cs: Error method changed.
7352         
7353         * convert.cs: Removed useless location parameter.
7354         (ExplicitNumericConversion): Don't do double enum check.
7355         (ExplicitConversionCore): Renamed from ExplicitConversion.
7356         (ExplicitUnsafe): Extracted from ExplicitConversion.
7357         (ExplicitConversion): Uses for error reporting.
7358         
7359         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
7360         error messages.
7361         (ResolveBoolean): Uses common error method.
7362         (CastToDecimal): Get rid of ec.
7363         (CastFromDecimal): Optimized.
7364         (ConvCast): Get rid of ec.
7365         
7366         * enum.cs (ResolveValue): Reset in_transit immediately.
7367         (Emit): Return after first error.
7368         
7369         * expression.cs: Convert changes.
7370         
7371         * literal.cs: Error method changed.
7372         
7373         * statement.cs: Error method changed.
7374
7375 2005-10-03  Raja R Harinath  <rharinath@novell.com>
7376
7377         * support.cs (SeekableStreamReader.Position): Don't error out when
7378         the requested position is just beyond the end of the current
7379         buffered data.
7380
7381 2005-09-28  Raja R Harinath  <rharinath@novell.com>
7382
7383         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
7384         try to keep in sync with the byte count of the underlying Stream.
7385         However, this limits us to a window size of 2048 characters: i.e.,
7386         the maximum lookahead of our lexer/parser can be 2048 characters.
7387
7388 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
7389
7390         Fix #76255.
7391         * driver.cs: Fix compilation files with full root path.
7392
7393 2005-09-25  Miguel de Icaza  <miguel@novell.com>
7394
7395         * report.cs (SymbolRelatedToPreviousError): Format the output so
7396         it does not use an open parenthesis that is never closed. 
7397
7398         * driver.cs: Follow coding guidelines
7399
7400 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
7401
7402         Fix #72930.
7403         * const.cs (Const.ResolveValue): Check for assigning non-null
7404         value to reference type.
7405
7406 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
7407
7408         * anonymous.cs: Implemented ExprClassName.
7409         
7410         * assign.cs (Assign.DoResolve): Don't chrash when type is not
7411         delegate.
7412         
7413         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
7414         check.
7415         
7416         * class.cs (StaticClass.DefineContainerMembers): Report protected
7417         members as error.
7418         
7419         * codegen.cs: if(ed) PRODUCTION.
7420         
7421         * convert.cs (Error_CannotImplicitConversion): Better error
7422         distinction.
7423         
7424         * cs-parser.jay: More error checks.
7425         
7426         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
7427         
7428         * driver.cs (CSCParseOption): Enabled wrong option check.
7429         
7430         * ecore.cs (Expression.ExprClassName): Turned to property.
7431         (MemberExpr.CheckIntermediateModification): For checking boxed
7432         value types     modification.
7433         
7434         * statement.cs (Fixed.Resolve): Expression type must be
7435         convertible to fixed type.
7436         (CollectionForeach.GetEnumeratorFilter,TryType):
7437         Small refactoring for easier error checking.
7438
7439 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
7440
7441         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
7442         attributes.
7443         
7444         * class.cs (GeneratedBaseInitializer): New class for customization
7445         compiler generated initializers.
7446         (MemberBase.DoDefine): Check Obsolete attribute here.
7447         (FieldMember.DoDefine): Ditto.
7448         
7449         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
7450         constants.
7451         
7452         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
7453         (MemberCore.GetObsoleteAttribute): Removed argument.
7454         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
7455         (MemberCore.CheckObsoleteType): New helper.
7456         
7457         * delegate.cs,
7458         * enum.cs,
7459         * statement.cs: Updates after MemberCore changes.
7460         
7461         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
7462         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
7463         
7464         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
7465         obsolete attribute for compiler construct.
7466         (As.DoResolve): Cache result.
7467         
7468         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
7469
7470 2005-09-26  Raja R Harinath  <rharinath@novell.com>
7471
7472         Fix #76133.
7473         * expression.cs (This.VerifyFixed): In a value type T, the type of
7474         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
7475         value type R, 'this' is treated as a value parameter.
7476
7477 2005-09-22  Miguel de Icaza  <miguel@novell.com>
7478
7479         * statement.cs (Lock): Use the TemporaryVariable class instead of
7480         manually using local variables as those do not work when variables
7481         are captured.
7482
7483         * ecore.cs: Moved the TemporaryVariable class from being a nested
7484         class inside Foreach to be a public class that can be employed in
7485         other places. 
7486
7487 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
7488
7489         * cs-parser.jay: interface_accessors replaced by
7490         accessor_declarations.
7491
7492         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
7493         location.
7494         
7495         * statement.cs (GotoCase.Resolve): Convert null constant to
7496         null case.
7497         (SwitchLabel.ResolveAndReduce): Ditto.
7498         (SwitchLabel.NullStringCase): Custom null stamp.
7499         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
7500         
7501         typemanager.cs (CSharpSignature): Don't skip first argument
7502         for full names.
7503
7504 2005-09-18  Miguel de Icaza  <miguel@novell.com>
7505
7506         * driver.cs: Set InEmacs based on the environment variable EMACS. 
7507
7508         * location.cs (InEmacs): in this mode, do not report column
7509         location as it confuses Emacs.
7510
7511 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
7512
7513         * cfold.cs, constant.cs, convert.cs, ecore.cs,
7514         expression.cs, iterators.cs, literal.cs: Store constants and
7515         literals location.
7516         
7517         * class.cs (MemberBase.ShortName): Pass location.
7518         
7519         * cs-parser.jay: Some location fixes.
7520         
7521         * ecore.cs (Expression.Location): Made virtual.
7522
7523 2005-09-05  Miguel de Icaza  <miguel@novell.com>
7524
7525         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
7526         if the underlying types are the same, otherwise we need to produce
7527         code that will do the proper cast.
7528
7529         This was exposed by Marek's constant rewrite which produced
7530         invalid code for the call site:
7531
7532         enum X : long { a }
7533         void Method (X v) {}
7534
7535         Method ((X) 5)
7536
7537         This fixes test-49.cs
7538
7539 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
7540
7541         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
7542           Type/Object should be allowed as well. Fixed bug #75968.
7543
7544 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
7545
7546         * expression.cs : (Binary.DoResolve): when one is enum constant and
7547           another is constant 0, then return enum one *as enum type*.
7548           Fixed bug 74846.
7549
7550 2005-09-02  Raja R Harinath  <rharinath@novell.com>
7551
7552         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
7553         internal.
7554
7555         Fix #75941.
7556         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
7557         flow-branching for LocalVariableReferences in case we were invoked
7558         from a MemberAccess.
7559         * expression.cs (LocalVariableReference.VerifyAssigned): New.
7560         Carved out of ...
7561         (LocalVariableReference.DoResolveBase): ... this.
7562         (MemberAccess.Resolve): Do the check that was disabled during
7563         SimpleNameResolve.
7564
7565 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
7566
7567         * class.cs :
7568           (PartialContainer.Create): check abstract/sealed/static strictly
7569           but abstract/sealed can exist only at one side. Fixed bug #75883.
7570
7571 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
7572
7573         Fix #75945.
7574         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
7575         specified, don't default to UnmanagedType.I4.
7576
7577 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
7578
7579         * expression.cs : conditional operator should check possibly
7580           incorrect assign expression. Fixed bug #75946.
7581
7582 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
7583
7584         * cs-tokenizer.cs, cs-parser.jay, driver.cs, support.cs :
7585           Reverting the change. gmcs is much complex than mcs on this matter.
7586
7587 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
7588
7589         * cs-tokenizer.cs : To read another token ahead of the actual 
7590           consumption, use new SavedToken and cache token instead of moving
7591           back the stream with SeekableStreamReader (it seemed problematic).
7592         * cs-parser.jay,
7593           driver.cs : Thus use StreamReader directly.
7594         * support.cs : Thus removed SeekableStreamReader.
7595
7596 2005-08-30  Raja R Harinath  <rharinath@novell.com>
7597
7598         Fix #75934.
7599         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
7600         (ScopeInfo.EmitScopeType): Use it to construct field names from
7601         names of captured locals.
7602
7603         Fix #75929.
7604         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
7605         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
7606         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
7607         (ExplicitConversion): Remove enum cases already handled by
7608         implicit conversion.  Move implicit conversion check to the beginning.
7609         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
7610         * expression.cs (ArrayCreation.EmitDynamicInitializers):
7611         Don't treat System.Enum as a struct.
7612
7613 2005-08-30  Jb Evain  <jbevain@gmail.com>
7614
7615         * attribute.cs: handles as expression in parameters.
7616
7617 2005-08-30  Raja R Harinath  <rharinath@novell.com>
7618
7619         Fix #75802.
7620         * class.cs (TypeContainer.VerifyClsName): Don't use a
7621         PartialContainer when verifying CLS compliance.
7622         (AbstractPropertyEventMethod): Set Parent here, ...
7623         (PropertyMethod): ... not here.
7624
7625 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
7626
7627         * attribute.cs : escaped attribute name should not be allowed to be
7628           resolved (e.g. @class as classAttribute). Fixed bug #75930.
7629
7630 2005-08-29  Raja R Harinath  <rharinath@novell.com>
7631
7632         Fix #75927.
7633         * convert.cs (ImplicitStandardConversionExists): Allow zero also
7634         when converting a long constant to unsigned long.
7635         * expression.cs (Invocation.OverloadResolve): Add sanity check to
7636         detect where IsApplicable and VerifyArgumentsCompat disagree.
7637
7638 2005-08-29  Raja R Harinath  <rharinath@novell.com>
7639         and Carlos Alberto Cortez  <carlos@unixmexico.org>
7640
7641         Fix #75848.
7642         * class.cs (TypeContainer.CanElideInitializer): New helper.
7643         (TypeContainer.EmitFieldInitializers): Use it to determine if we
7644         can safely emitting the initializer of a field.
7645
7646 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
7647
7648         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
7649           allowed inside a switch (without loop). Fixed bug #75433.
7650
7651 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
7652
7653         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
7654         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
7655
7656 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
7657
7658         * driver.cs : kinda reverting the default encoding changes (not exact 
7659           revert since I noticed that "codepage:reset" might not work fine).
7660
7661 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
7662
7663         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
7664           Location. Now getter and setter store location correctly.
7665           (errors/cs0111-12.cs now reports the expected location.)
7666
7667 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
7668
7669         * driver.cs : Use default encoding on the environment.
7670           Removed (now that) extra parameter for SeekableStreamReader.
7671         * support.cs : (SeekableStreamReader) third .ctor() argument for
7672           StreamReader is not required (always true). preamble size could
7673           be acquired in simpler and safe way.
7674
7675 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
7676
7677         * cs-parser.jay: report CS0642 at warning level 3
7678           and report CS0642 for an if else statement also
7679           fixes bug #74745. Patch by John Luke (and a bit
7680           modified by me).
7681           Removed extra CS0642 warning check for "while",
7682           "for" and "fixed".
7683         * statement.cs: In Block.Resolve(), CS0642 check
7684           is reimplemented to check a sequence of an empty
7685           statement and a block.
7686
7687           Both fix bug #66777.
7688
7689 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
7690
7691         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
7692         detection until I fix it.
7693         
7694         * cs-tokenizer.cs: Changed error message.
7695         
7696         * cs-parser.jay: Fixed 2 error locations.
7697         
7698         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
7699         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
7700         properties.
7701         
7702         * enum.cs (GetSignatureForError): Fixed.
7703         
7704         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
7705         method detection.
7706         
7707         * class.cs,
7708         * typemanager.cs (RegisterProperty): Removed.
7709         
7710         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
7711
7712 2005-08-24  Raja R Harinath  <rharinath@novell.com>
7713
7714         Fix #75874.
7715         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
7716         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
7717
7718 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7719
7720         * expression.cs : tiny fix is required for not warning positive ulong.
7721           See test-441.cs.
7722
7723 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7724
7725         * expression.cs : add CS0652 check for constant and integral
7726           expression. Fixed bug #53974.
7727
7728 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7729
7730         * expression.cs : in DoNumericPromotions(), check if there is implicit
7731           conversion overload for string (to check CS0034). Fixed bug #52492.
7732
7733 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7734
7735         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
7736
7737 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7738
7739         * ecore.cs : report location when it is *not* Null.
7740
7741 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7742
7743         * codegen.cs,
7744           ecore.cs,
7745           flowanalysis.cs,
7746           expression.cs:
7747           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
7748           correctly. Fixed bug #75721.
7749
7750 2005-08-23  Raja R Harinath  <rharinath@novell.com>
7751
7752         * support.cs (SeekableStreamReader.Position): Avoid an expensive
7753         loop that performs 'min (pos, char_count)'.
7754
7755         Fix #75862.
7756         * expression.cs (Unary.ResolveOperator): Don't discard implicit
7757         converted value in Operator.OnesComplement.
7758
7759 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
7760
7761         * anonymous.cs: If the anon method is pulled into a helper class,
7762         it needs to be `internal' not `private'. Fixes runtime behavior on
7763         msft. bug #75704
7764
7765 2005-08-20  Martin Baulig  <martin@ximian.com>
7766
7767         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
7768         scope if we don't already have it.
7769
7770         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
7771         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
7772         fixes #75867.
7773
7774 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
7775
7776         Fix #75803
7777         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
7778         is a partial class.
7779
7780 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
7781
7782         The big constants rewrite
7783         Fix #75746, #75685 and more
7784         As a side effect saved 1MB for MWF ;-)
7785         
7786         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
7787         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
7788         enum based for corlib compilation.
7789         
7790         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
7791         subtractions.
7792         
7793         * class.cs (FixedField.Define): Use ResolveAsConstant.
7794         
7795         * const.cs (IConstant): Interface constants and enums.
7796         (Const.ResolveValue): New method for constant resolvning.
7797         (ExternalConstant): Constants from imported assemblies.
7798         
7799         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
7800         conversion; like enums.
7801         (Constant.ToType): Converts this constant to different type.
7802         (Constant.Increment): Adds 1.
7803         
7804         * convert.cs (ImplicitConversionRequired): Simplified.
7805         
7806         * cs-parser.jay: Create EnumMember directly.
7807         
7808         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
7809         
7810         * doc.cs (GenerateEnumDocComment): Removed.
7811         
7812         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
7813         (ConvertIntLiteral): Removed.
7814         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
7815         
7816         * enum.cs (EnumMember): Implement IConstant.
7817         (Enum.IsValidEnumConstant): Removed.
7818         (Enum.GetNextDefaultValue): Removed.
7819         (Enum.FindMembers): Updated.
7820         (Enum.GenerateDocComment): Iterate enum members.
7821         
7822         * expression.cs (Cast.TryReduce): Handle enums correctly.
7823         (New.Constantify): Made public.
7824         (MemberAccess.DoResolve): Removed contant specific if(s).
7825         
7826         * literal.cs (NullLiteral): Implement new abstract methods.
7827         
7828         * statement.cs (GotoCase.Resolve): Use new constant methods.
7829         (SwitchLabel.ResolveAndReduce): Use new constant methods.
7830         
7831         * typemanager.cs (LookupEnum): Removed.
7832         (IsEnumType): Fixed to work with corlib.
7833         (RegisterConstant): Removed.
7834         (LookupConstant): Removed.
7835         (GetConstant): Changed to work with IConstant.
7836
7837 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
7838
7839         * location.cs : Fixed overflown (>255) column number.
7840
7841 2005-08-03  Raja R Harinath  <rharinath@novell.com>
7842
7843         First cut of the qualified-alias-member feature.
7844         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
7845         token.
7846         * cs-parser.jay (DOUBLE_COLON): New token.
7847         (namespace_or_type_name): Add rule for recognizing
7848         qualified-alias-members.
7849         (primary_expression): Likewise.
7850         (element_access): Allow QualifiedAliasMember as a possible
7851         type-bearing expression.
7852         (local_variable_type, local_variable_pointer_type): Likewise.
7853         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
7854         aliases in the current and enclosing namespace declarations.
7855         (NamespaceEntry.UsingAlias): Add CS0440 warning.
7856         * decl.cs (MemberName.is_double_colon): New.
7857         (MemberName.MemberName): Add new constructor for alias-member.
7858         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
7859         * expression.cs (QualifiedAliasMember): New expression type.
7860
7861 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7862
7863         * location.cs : it borked when no argument was specified.
7864
7865 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7866
7867         * location.cs : tiny ToString() format fix.
7868
7869 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7870
7871         * statement.cs : oops, it was missing.
7872
7873 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7874
7875         A set of fixes for precise line/column location.
7876
7877         * location.cs :
7878           "token" field now holds a file/line "delta", a line number offset 
7879           from the segment, and a column number. See also:
7880           http://lists.ximian.com/pipermail/mono-devel-list/2004-
7881           December/009508.html
7882           Removed static IsNull. Use instance IsNull property instead.
7883         * cs-tokenizer.cs :
7884           For some tokens it stores Location. For Identifier it stores
7885           LocatedToken which is a pair of string name and location.
7886           Column numbers are adjusted only at getChar().
7887         * report.cs :
7888           Use Location.ToString() for reporting (it now contains column).
7889         * cs-parser.jay :
7890           Largely modified to use LocatedToken instead of
7891           string (IDENTIFIER), and to acquire Location from some tokens.
7892         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
7893           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
7894           codegen.cs :
7895           Now MemberName holds Location. DeclSpace.ctor() receives Location
7896           as a parameter. Removed extra parameters to all derived classes.
7897           Replaced Location.IsNull() with instance property.
7898         * assign.cs, expression.cs :
7899           Added .ctor() overload that omits Location.
7900         * attribute.cs :
7901           Added "nameEscaped" flag that indicates the identifier was escaped
7902           in the source file. This fixes bug #57047.
7903
7904 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
7905
7906         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
7907         New method, looking for lo-case imported cls type.
7908
7909         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
7910         here.
7911
7912         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
7913
7914         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
7915
7916         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
7917         all_imported_types.
7918         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
7919
7920         Optimized to save 3.5 MB for SWF compilation.
7921
7922 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
7923
7924         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
7925         (PartialContainer.Create): Moved logic AddToContainer.
7926         (PartialContainer.MarkForDuplicationCheck): Shares name.
7927         
7928         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
7929         place.
7930         
7931         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
7932         initialization.
7933         (Namespace.GetSignatureForError): New method.
7934         
7935         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
7936         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
7937
7938 2005-08-01  Raja R Harinath  <rharinath@novell.com>
7939
7940         Fix #75669.
7941         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
7942         member lookup rather than qualifier_type, since qualifier_type can
7943         be null.
7944
7945 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
7946
7947         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
7948         enum member.
7949
7950 2005-07-31  Miguel de Icaza  <miguel@novell.com>
7951
7952         * statement.cs: Copy the local exception into the exception
7953         captured local.  Fixes 75674
7954
7955 2005-07-31  Raja R Harinath  <harinath@gmail.com>
7956
7957         Fix #75658.
7958         * expression.cs (Invocation.OverloadResolve): Don't report error
7959         CS1501 if error CS1502 has been reported.
7960         (New.DoResolve): Delegate CS1501 reporting to
7961         Invocation.OverloadResolve.
7962
7963         Fix #75656.
7964         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
7965         invariant-meaning-in-block property in an enclosing block if
7966         necessary.
7967
7968 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
7969
7970         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
7971         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
7972         (Switch.CheckSwitch): Just save 50kb for SWF.
7973
7974 2005-07-27  Martin Baulig  <martin@ximian.com>
7975
7976         * anonymous.cs (CaptureContext.AddField): Added
7977         `AnonymousContainer am' argument; compute its toplevel scope if
7978         it's not already computed.  Fixes #75649.
7979
7980 2005-07-26  Raja R Harinath  <rharinath@novell.com>
7981
7982         Fix #75628.
7983         * class.cs (Constructor.Emit): Reset block to null if the block
7984         resolve fails.
7985
7986 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
7987
7988         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
7989
7990 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
7991
7992         * class.cs (MethodData.Define): Check whether accessor implementing
7993         interface is public.
7994
7995         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
7996
7997 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
7998
7999         Fix #57245
8000         * namespace.cs (LookupType): Moved same type check to...
8001         
8002         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
8003         with the same name.
8004
8005 2005-07-21  Raja R Harinath  <rharinath@novell.com>
8006
8007         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
8008         already found a typebuilder.
8009         * class.cs (MethodCore.IsDuplicateImplementation): Compare
8010         MemberNames, not strings.
8011
8012         * const.cs (Error_ExpressionMustBeConst): 
8013         Rename from Error_EpressionMustBeConst.
8014         * const.cs, class.cs, statement.cd: Update.
8015
8016 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
8017
8018         Fix #65573
8019
8020         * const.cs (Const.LookupConstantValue): Report missing contant expression
8021         everytime.
8022         (Error_EpressionMustBeConstant): Only one error method.
8023
8024         * class.cs, statement.c: Updated.
8025
8026 2005-07-20  Raja R Harinath  <rharinath@novell.com>
8027
8028         * statement.cs (Block.Flags): Add back HasVarargs.
8029         (Block.flags): Make protected.
8030         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
8031
8032         * typemanager.cs (types, typecontainers, user_types): Remove.
8033         (UserTypes, TypeContainers): Likewise.
8034         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
8035         (CleanUp, Reset): Update.
8036         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
8037         (GetNestedType): Use Type.GetNestedType.
8038         (CoreLookupType): Take two arguments, the namespace and the
8039         basename of the type.  Update to use the Namespace.Lookup
8040         mechanism.
8041         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
8042         (RealMemberLookup): Use IsNestedChildOf instead of playing with
8043         string concatenation and substring matches.
8044         * class.cs, enum.cs, delegate.cs: Update to changes.
8045
8046 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
8047
8048         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
8049         Expression and made virtual.
8050
8051         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
8052         (ImplicitStandardConversionExists): Fixed `byte' typo ?
8053
8054         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
8055
8056         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
8057         error message.
8058
8059         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
8060         change.
8061
8062 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
8063
8064         Fix #57707
8065         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
8066         AssemblyCultureAttribute is not used on executable.
8067
8068         * rootcontext.cs,
8069         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
8070
8071 2005-07-16  Raja R Harinath  <rharinath@novell.com>
8072
8073         Fix #60638.
8074         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
8075         New.  Reports CS0252/CS0253.
8076         Mostly taken from preliminary patch by Duncak Mak.
8077         (Binary.DoResolveOperator): Store results of operator lookup.
8078         Use them to detect if we need to warn about unintended reference
8079         comparisons.
8080
8081 2005-07-15  Raja R Harinath  <rharinath@novell.com>
8082
8083         Fix #72969.
8084         * namespace.cs (Namespace.Lookup): Add back location parameter.
8085         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
8086         * delegate.cs, ecore.cs, expression.cs: Update to changes.
8087
8088         * codegen.cs (EmitContext.DeclSpace): Make readonly.
8089         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
8090         (Namespace.LookupType): ... this.
8091         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
8092         of namespaces.
8093         * typemanager.cs (LookupTypeReflection): Remove buggy code that
8094         purported to handle pointers.
8095         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
8096         CoreLookupType.
8097
8098 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
8099
8100         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
8101         type as namespace.
8102
8103 2005-07-15  Raja R Harinath  <rharinath@novell.com>
8104
8105         * namespace.cs (Namespace.Lookup): Drop location parameter.
8106         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
8107         (NamespaceEntry.Lookup): ... this.
8108         (NamespaceEntry.Error_AmbiguousTypeReference):
8109         Move here from DeclSpace.
8110         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
8111         names ...
8112         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
8113         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
8114         Move to NamespaceEntry.
8115         * delegate.cs, expression.cs: Update to changes.
8116
8117 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
8118
8119         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
8120         CheckAttributeType and refactored.
8121         (Attribute.ResolvePossibleAttributeType): Changed to reuse
8122         ResolveAsTypeTerminal error handling.
8123         (ResolveAsTypeTerminal): Introduced because of global attributes extra
8124         handling.
8125         (GetSignatureForError): Print errors in same way.
8126
8127         * class.cs,
8128         * codegen.cs: Reflect attribute GetSignatureForError change.
8129
8130         * ecore.cs,
8131         * expression.cs: Add silent parameter to ResolveAsTypeStep.
8132
8133         * namespace.cs (UsingEntry): Refactored to make fields private.
8134
8135         * assign.cs,
8136         statement.cs: Error_UnexpectedKind has extra parameter.
8137
8138 2005-07-14  Raja R Harinath  <rharinath@novell.com>
8139
8140         * ecore.cs (IAlias): Remove.
8141         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
8142         that implement the interface.
8143         * namespace.cs (Namespace): Likewise.
8144         (Namespace.declspaces): Renamed from 'defined_names'.
8145         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
8146         DeclSpace instead of an IAlias.
8147         * tree.cs (Tree.AddDecl): Update.
8148
8149 2005-07-12  Raja R Harinath  <rharinath@novell.com>
8150
8151         * statement.cs (Block.Flags); Remove HasVarargs.
8152         (Block.HasVarargs): Move to ToplevelBlock.
8153         (Block.ThisVariable, Block.AddThisVariable): Likewise.
8154         (Block.Variables): Make protected.  Initialize variable hashtable
8155         if necessary.
8156         (Block.AddVariable): Update.
8157         (Block.Resolve): Update to changes.
8158         (ToplevelBlock.HasVarargs): New boolean.
8159         (ToplevelBlock.ThisVariable): Move here from Block.
8160         (ToplevelBlock.AddThisVariable): Likewise.
8161         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
8162         * expression.cs (This.ResolveBase): Update to changes.
8163         (ArglistAccess.DoResolve): Likewise.
8164
8165 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
8166
8167         Fix #75321
8168         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
8169
8170         * class.cs (TypeContainer.VerifyMembers): Distinguish between
8171         not used and not used & assigned.
8172         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
8173
8174 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
8175
8176         Fix #75053
8177         * expression.cs (Is.DoResolve): null is never provided type.
8178
8179 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
8180
8181         Fix #52496
8182         * cs-parser.jay: Less strict event error rule to catch more errors.
8183
8184 2005-07-08  Martin Baulig  <martin@ximian.com>
8185
8186         Fix test-iter-10.cs - distinguish whether we `yield' in a property
8187         gettter (allowed) or setter (not allowed).
8188
8189         * class.cs (Accessor): Implement IIteratorContainer.
8190         (Accessor.Yields): New public field.
8191         (PropertyBase.PropertyMethod.Define): Handle iterators on a
8192         per-accessor basis.
8193
8194         * cs-parser.jay
8195         (get_accessor_declaration, set_accessor_declaration): Set the
8196         `yields' flag on the accessor, not the property.
8197         (property_declaration): Do the iterators check on a per-accessor
8198         basis and not for the whole property.
8199
8200 2005-07-08  Martin Baulig  <martin@ximian.com>
8201
8202         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
8203         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
8204
8205 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
8206
8207         Fix #74975
8208         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
8209         (ExtractSecurityPermissionSet): Cope with self referencing security
8210         attributes properly.
8211
8212         * driver.cs (SetOutputFile): Made public property OutputFile.
8213
8214 2005-07-07  Raja R Harinath  <rharinath@novell.com>
8215
8216         Fix #75486.
8217         * class.cs (TypeContainer.first_nonstatic_field): Rename from
8218         has_nonstatic_fields.  Make into a FieldBase pointer.
8219         (TypeContainer.AddField): Add CS0282 check.
8220         (TypeContainer.EmitType): Update.
8221
8222 2005-07-06  Miguel de Icaza  <miguel@novell.com>
8223
8224         * cs-tokenizer.cs (consume_identifier): Do not create strings to
8225         compare if they start with __.
8226
8227 2005-07-06  Raja R Harinath  <rharinath@novell.com>
8228
8229         * statement.cs (Switch.SwitchGoverningType): Only look at
8230         UserCasts that don't need implicit standard conversions to one of
8231         the allowed switch types (Fixes test-322.cs).
8232         (LocalInfo.Resolve): Re-enable sanity-test.
8233
8234 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
8235
8236         * cs-tokenizer.cs (consume_identifier): Detect double undescores
8237         
8238         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
8239         
8240         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
8241
8242 2005-07-06  Raja R Harinath  <rharinath@novell.com>
8243
8244         Fix #75472.
8245         * ecore.cs (SimpleName.GetSignatureForError): Add.
8246         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
8247         (MemberAccess.GetSignatureForError): Add.
8248
8249 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
8250  
8251         The big error and warning messages review.
8252         
8253         * anonymous.cs,
8254         * assign.cs,
8255         * attribute.cs,
8256         * class.cs,
8257         * codegen.cs,
8258         * convert.cs,
8259         * cs-parser.jay,
8260         * cs-tokenizer.cs,
8261         * decl.cs,
8262         * delegate.cs,
8263         * doc.cs,
8264         * driver.cs,
8265         * ecore.cs,
8266         * enum.cs,
8267         * expression.cs,
8268         * flowanalysis.cs,
8269         * iterators.cs,
8270         * literal.cs,
8271         * location.cs,
8272         * modifiers.cs,
8273         * namespace.cs,
8274         * parameter.cs,
8275         * pending.cs,
8276         * report.cs,
8277         * rootcontext.cs,
8278         * statement.cs,
8279         * support.cs,
8280         * tree.cs,
8281         * typemanager.cs: Updated.
8282         
8283         * class.cs: (MethodCore.SetYields): Moved here to share.
8284         (PropertyMethod.Define): Moved iterator setup here.
8285         
8286         * iterators.cs: Add orig_method to have full access to parent
8287         container.
8288
8289 2005-07-05  Raja R Harinath  <rharinath@novell.com>
8290
8291         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
8292         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
8293         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
8294         variable of struct type.
8295         * expression.cs (Unary.ResolveOperator): Update to change.
8296         (Indirection.VerifyFixed): Likewise.
8297         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
8298         (ParameterReference.VerifyFixed): Value parameters are fixed.
8299         (This.VerifyFixed): Treat 'this' as a value parameter.
8300         * statement.cs (LocalInfo.IsFixed): Remove.
8301
8302 2005-07-01  Martin Baulig  <martin@ximian.com>
8303
8304         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
8305         `ec.EmitThis ()' to get the correct scope.
8306
8307 2005-07-01  Martin Baulig  <martin@ximian.com>
8308
8309         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
8310         instance is a ParameterReference; fixes #75299.
8311
8312 2005-07-01  Martin Baulig  <martin@ximian.com>
8313
8314         Reverted Marek's latest patch (r46725):
8315         - it contains structural changes which are neither mentioned in
8316           the ChangeLog nor explained anywhere; for example the additional
8317           argument of EmitContext's and Iterator's .ctor's and the
8318           TypeContainer.DefineMembers() change.
8319         - structural changes like this should go in in seperate patches
8320           and not be hidden in a huge patch which just seems to affect
8321           warnings and errors.
8322           a big and hard to understand patch.
8323         - it breaks iterators and causes regressions, for instance in
8324           test-iter-03.cs.      
8325
8326 2005-06-30  Raja R Harinath  <rharinath@novell.com>
8327
8328         Fix #75412.
8329         * expression.cs (Indexers.map): Remove.
8330         (Indexers.Append): Filter out inaccessible setters and getters.
8331         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
8332
8333         Fix #75283.
8334         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
8335         Refactored from ...
8336         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
8337         (FieldExpr.Emit, PropertyExpr.Emit): Update.
8338         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
8339         * expression.cs (Invocation.EmitCall): Add CS0120 check.
8340
8341 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
8342
8343         Fix #75322
8344         * class.cs (FieldBase.GetInitializerExpression): One more field
8345         for backup.
8346
8347 2005-06-28  Miguel de Icaza  <miguel@novell.com>
8348
8349         * pending.cs: Do not define a proxy if the base method is virtual,
8350         it will be picked up by the runtime (bug 75270).
8351
8352 2005-06-08  Martin Baulig  <martin@ximian.com>
8353
8354         The big Iterators rewrite :-)
8355
8356         * iterators.cs: Rewrite this to use the anonymous methods framework.
8357
8358         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
8359         before the TypeContainers; see 2test-21.cs.
8360
8361         * class.cs
8362         (TypeContainer.DefineType): Don't create a new EmitContext if we
8363         already have one (this only happens if we're an Iterator).
8364         (TypeContainer.Define): Also call Define() on all our iterators.
8365         (Method.CreateEmitContext): Added support for iterators.
8366
8367         * anonymous.cs
8368         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
8369         (AnonymousContainer.CreateMethodHost): Moved here from
8370         AnonymousMethod and made abstract.
8371         (AnonymousContainer.CreateScopeType): New abstract method.
8372         (AnonymousContainer.IsIterator): New public property.
8373         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
8374         get the ScopeTypeBuilder rather than manually defining it here. 
8375         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
8376         iterators here.
8377
8378         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
8379         before RootContext.DefineTypes().
8380
8381         * codegen.cs (EmitContext.RemapToProxy): Removed.
8382         (EmitContext.CurrentAnonymousMethod): Changed type from
8383         AnonymousMethod -> AnonymousContainer.
8384         (EmitContext.ResolveTopBlock): Protect from being called twice.
8385         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
8386         (EmitContext.EmitThis): Removed the iterators hacks; use the
8387         anonymous methods framework for that.
8388
8389         * statement.cs
8390         (ToplevelBlock.Container): Make this a property, not a field.
8391         (ToplevelBlock.ReParent): New public method; move the
8392         ToplevelBlock into a new container.
8393         (Foreach.TemporaryVariable): Simplify.
8394
8395 2005-06-05  Martin Baulig  <martin@ximian.com>
8396
8397         * statement.cs (LocalInfo.CompilerGenerated): New flag.
8398         (Block.AddTemporaryVariable): New public method; creates a new
8399         `LocalInfo' for a temporary variable.
8400         (Block.EmitMeta): Create the LocalBuilders for all the temporary
8401         variables here.
8402         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
8403         non-iterator variables.
8404
8405 2005-06-05  Martin Baulig  <martin@ximian.com>
8406
8407         * statement.cs (Foreach.TemporaryVariable): Create the
8408         LocalBuilder in the Emit phase and not in Resolve since in some
8409         situations, we don't have an ILGenerator during Resolve; see
8410         2test-19.cs for an example.
8411
8412 2005-06-04  Martin Baulig  <martin@ximian.com>
8413
8414         **** Merged r45395 from GCS ****
8415
8416         The big Foreach rewrite - Part II.
8417
8418         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
8419         with `PropertyInfo ienumerator_getcurrent'.
8420
8421         * codegen.cs (VariableStorage): Removed.
8422
8423         * statement.cs
8424         (Foreach): Derive from Statement, not ExceptionStatement.
8425         (Foreach.CollectionForeach): New nested class.  Moved all the code
8426         dealing with collection foreach here.
8427         (Foreach.ForeachHelperMethods): Removed.
8428         (Foreach.TemporaryVariable): Implement IMemoryLocation.
8429
8430 2005-05-23  Martin Baulig  <martin@ximian.com>
8431
8432         * statement.cs (Try.DoResolve): Don't create a `finally' if we
8433         don't need to.  Fix #75014.
8434
8435 2005-05-20  Martin Baulig  <martin@ximian.com>
8436
8437         Merged r44808 from GMCS.
8438
8439         * class.cs (TypeContainer.CircularDepException): Removed.
8440         (TypeContainer.DefineType): Removed the `InTransit' stuff.
8441         (TypeContainer.CheckRecursiveDefinition): Check for circular class
8442         (CS0146) and interface (CS0529) dependencies here.
8443
8444 2005-06-21  Raja R Harinath  <rharinath@novell.com>
8445
8446         * expression.cs (Invocation.EmitCall): Fix initialization
8447         'this_call' to reflect current behaviour.  Fix indentation.
8448
8449         * convert.cs (FindMostEncompassedType): Add two trivial special
8450         cases (number_of_types == 0 || number_of_types == 1).
8451         (FindMostEncompasingType): Likewise.
8452
8453 2005-06-17  Raja R Harinath  <rharinath@novell.com>
8454
8455         Some cleanups preparing for the fix of #75283.
8456         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
8457         error testing.
8458         (EventExpr.InstanceResolve): Likewise.
8459         (EventExpr.DoResolve): Remove redundant checks.
8460
8461 2005-06-10  Duncan Mak  <duncan@novell.com>
8462
8463         * cs-tokenizer.cs (process_directives): New flag for controlling
8464         the processing of preprocessor directives.
8465         (x_token): After seeing a '#', return Token.NONE instead of going
8466         to handle_preprocessing_directive() when not processing
8467         directives. This avoids unnecessary processing during the token peek in
8468         is_punct().
8469
8470         This fixes #74939.
8471
8472         * cs-tokenizer.cs (handle_preprocessing_directive, xtoken): Use
8473         the existing error reporting methods instead of Report.Error.
8474
8475         * convert.cs (priv_fmt_expr): Remove. It's not needed anymore
8476         after Raja's rewrite.
8477
8478 2005-06-08  Miguel de Icaza  <miguel@novell.com>
8479
8480         * class.cs: Small fix.
8481
8482 2005-06-08  Raja R Harinath  <rharinath@novell.com>
8483
8484         Fix #75160.
8485         * class.cs (GetPartialBases): Fix return value check of
8486         part.GetClassBases.
8487
8488 2005-06-07  Raja R Harinath  <rharinath@novell.com>
8489
8490         Ensure that partial classes are registered in their enclosing
8491         namespace.  Initial part of fix of #75160.
8492         * tree.cs (Tree.RecordDecl): Add new namespace argument.
8493         Register declspace with namespace here, not in
8494         DeclSpace.RecordDecl.
8495         * cs-parser.jay: Pass namespace to RecordDecl.
8496         * class.cs (PartialContainer.Create): Likewise.
8497         (ClassPart.DefineType): New sanity-check.  Throws an exception if
8498         called.
8499         * decl.cs (Declspace.RecordDecl): Remove.
8500         * namespace.cs (NamespaceEntry.DefineName): Remove.
8501
8502 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
8503
8504         * rootcontext.cs: Reset TargetExt as well.
8505
8506 2005-06-03  Raja R Harinath  <rharinath@novell.com>
8507
8508         * ecore.cs (Expression.Resolve): Emit CS0654 error when
8509         -langversion:ISO-1.
8510
8511 2005-06-02  Raja R Harinath  <rharinath@novell.com>
8512
8513         Fix #75080, cs0119.cs.
8514         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
8515         of ...
8516         (Expression.Resolve): ... this.  Use it.  Remove bogus code
8517         allowing ExprClass.Type and ExprClass.Namespace for
8518         ResolveFlags.VariableOrValue.
8519         (Expression.Resolve) [1-argument variant]: Change default resolve
8520         flags based on language version.
8521         (Expression.Error_UnexpectedKind): Use a simple string array
8522         rather than an ArrayList.
8523         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
8524         not ExprClass.Type.
8525         (TypeOfVoid.DoResolve): Likewise.
8526         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
8527         flags argument -- it always has the same value.
8528
8529 2005-05-31  Raja R Harinath  <rharinath@novell.com>
8530
8531         Fix #75081.
8532         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
8533         Use it in the error message.
8534         * assign.cs, expression.cs, statement.cs: Update.
8535
8536 2005-05-30  Raja R Harinath  <rharinath@novell.com>
8537
8538         Fix #75088.
8539         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
8540         the "almostMatchedMember" case too.
8541         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
8542         that failed the accessibility checks to 'almost_match'.
8543
8544 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
8545
8546         * attribute.cs: Use internal MethodBuilder methods to set
8547         ExactSpelling and SetLastError on PInvoke methods, instead
8548         of passing them via charset.  Fixes #75060.
8549
8550 2005-05-27  Raja R Harinath  <rharinath@novell.com>
8551
8552         * parameter.cs (Parameter): Remove TODO comment.
8553         (Parameter.DefineParameter): Remove Location parameter.
8554         (Parameters.LabelParameters): Likewise.
8555         * class.cs (Constructor.Emit): Update to change.
8556         (MethodData.Emit): Likewise.
8557         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
8558         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
8559
8560 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
8561
8562         * parameter.cs,
8563           Removed Parameters.Location and added Parameter.Location instead.
8564           Removed Location parameter from Emit() and GetSignature().
8565         * anonymous.cs,
8566           class.cs,
8567           cs-parser.jay,
8568           delegate.cs,
8569           iterators.cs,
8570           statement.cs :
8571           Modified all related calls.
8572
8573 2005-05-26  Raja R Harinath  <rharinath@novell.com>
8574
8575         Improve user-defined conversion handling.
8576         * convert.cs (GetConversionOperators): Rewrite.  Return only the
8577         applicable operators.
8578         (AddConversionOperators): New.  Helper for GetConversionOperators.
8579         (FindMostEncompassedType, FindMostEncompassingType): Verify that
8580         there is only one most encompassed/encompassing type.
8581         (FindMostSpecificSource, FindMostSpecificTarget): Remove
8582         "applicable operator" handling.
8583         (UserConversion): Move cache here from GetConversionOperators.
8584         Directly cache the chosen operator, rather than the whole
8585         MethodGroup.
8586         (ExplicitNumericConversion): Fix buggy implementation of Decimal
8587         case.  Allow conversion of decimal to sbyte and byte too.
8588         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
8589         New static methods.  Used to avoid allocating EmptyExpressions in
8590         convert.cs.
8591
8592 2005-05-24  Duncan Mak  <duncan@novell.com>
8593
8594         * ecore.cs (CastFromDecimal): New class for casting a decimal to
8595         another class, used in Convert.ExplicitNumericConversion.
8596         (CastToDecimal): New class, similar to above, but casts to
8597         System.Decimal, used in Convert.ImplicitNumericConversion and also
8598         in explicit convesion from double/float to decimal.
8599
8600         * convert.cs (ImplicitNumericConversion): Handle implicit
8601         conversions to System.Decimal.
8602         (ExplicitNumericConversion): handle explicit conversions to
8603         System.Decimal.
8604
8605         This fixes #68711.
8606         
8607 2005-05-20  Miguel de Icaza  <miguel@novell.com>
8608
8609         * typemanager.cs (EnumToUnderlying): Do not throw if we do not
8610         know the type at this stage, just break through.   Fixes #75008 
8611
8612 2005-05-19  Martin Baulig  <martin@ximian.com>
8613
8614         * delegate.cs
8615         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
8616         to disable error reporting.
8617
8618         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
8619         here since we don't want to report an error; see the new test-336.cs.
8620
8621 2005-05-19  Raja R Harinath  <rharinath@novell.com>
8622
8623         * statement.cs (ToplevelBlock.GetParameterReference)
8624         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
8625         Move here from class Block.
8626         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
8627         * expression.cs (ParameterReference.DoResolveBase): Likewise.
8628
8629 2005-05-18  Martin Baulig  <martin@ximian.com>
8630
8631         Fix #74978.
8632
8633         * flowanalysis.cs
8634         (FlowBranching.Reachability): Add non-static public And() and Or()
8635         methods.
8636         (FlowBranchingSwitch): New class; do the `break_origins' thing
8637         like in FlowBranchingLoop.
8638         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
8639         reachability, not just locals and parameters.
8640         (FlowBranching.MergeChild): Remove some of the hacks for loop and
8641         switch; MergeBreakOrigins() now takes care of that.
8642
8643 2005-05-18  Martin Baulig  <martin@ximian.com>
8644
8645         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
8646         a loop and may leave it, reset the barrier; fixes #74974.
8647
8648 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
8649         
8650         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
8651         is back.
8652         
8653         * cs-parser.jay: Catch more lexical errors.
8654         
8655         * report.cs: Add one more Error method.
8656         
8657         * rootcontext.cs,
8658         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
8659
8660 2005-05-17  Martin Baulig  <martin@ximian.com>
8661
8662         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
8663         #70970. 
8664
8665 2005-05-16  Raja R Harinath  <rharinath@novell.com>
8666
8667         Fix test-382.cs.  Emit values of decimal constants.
8668         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
8669         Carved out of ...
8670         (TypeContainer.AddField): ... this.
8671         (TypeContainer.EmitFieldInitializers): Allow the list of fields
8672         with initializers to include 'Const's.
8673         (ClassPart.RegisterFieldForInitialization): Forward to
8674         PartialContainer.
8675         * const.cs (Const.Const): Pass initializer to base class.
8676         (Const.Define): In case of decimal constants, register them for
8677         initialization in a static constructor.
8678
8679 2005-05-14  Martin Baulig  <martin@ximian.com>
8680
8681         * statement.cs (Block.Resolve): Correctly handle unreachable code;
8682         do not call ResolveUnreachable() on unreachable statements in
8683         here, see the comment in the source code.
8684
8685 2005-05-13  Raja R Harinath  <rharinath@novell.com>
8686
8687         Fix #74934.
8688         * expression.cs (BinaryResolveOperator): If one of the operands of
8689         an equality comparison is 'null' and the other is a pointer type,
8690         convert the null to a NullPointer.
8691         * convert.cs (ImplicitReferenceConversion): If the expression is a
8692         NullLiteral and the target type is a pointer type, return a
8693         NullPointer instead.
8694         (ImplicitConversionStandard): Likewise.
8695
8696 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
8697         
8698         * cs-parser.jay: Set readonly context based on special constructs.
8699         
8700         * expression.cs (LocalVariableReference.DoResolveBase): Improved
8701         readonly variable error handling.
8702         
8703         * rootcontext.cs (EmitCode): Don't verify members when error
8704         occurred.
8705         
8706         * statement.cs (LocalInfo): Add reaodnly context information.
8707         (SetReadOnlyContext, GetReadOnlyContext): New methods.
8708
8709 2005-05-13  Raja R Harinath  <rharinath@novell.com>
8710
8711         * statement.cs (Block.Resolve): Revert change below.  Modify fix
8712         for #74041 to initialize 'resolved' to false only for explicit
8713         blocks.  Fixes #74873.
8714
8715 2005-05-12  Raja R Harinath  <harinath@gmail.com>
8716
8717         Fix #74920.
8718         * typemanager.cs (unmanaged_enclosing_types): New.
8719         (IsUnmanagedType): Avoid infloops by using
8720         'unmanaged_enclosing_types' to talk with recursive invocations.
8721
8722 2005-05-13  Martin Baulig  <martin@ximian.com>
8723
8724         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
8725         instance variable, not a local.  Fix #74873.
8726         (Block.ResolveUnreachable): Set it to true here.
8727
8728 2005-05-11  Duncan Mak  <duncan@novell.com>
8729
8730         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
8731         continuing to process for 'arg'.
8732         (handle_preprocessing_directive): Check the argument of the #endif
8733         directive and report error CS1025 if there are any trailing
8734         characters.
8735
8736         According to the C# spec, having even whitespace after the #endif
8737         directive is illegal; however, because we call arg.TrimEnd ()
8738         beforehand, we have the same behavior as csc, allowing whitespace
8739         after the directive.
8740
8741         Fixes #74892.
8742
8743 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
8744
8745         Fix #74863.
8746         
8747         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
8748         (Constructor.GetObsoleteAttribute): Implemented correctly.
8749
8750 2005-05-10  Martin Baulig  <martin@ximian.com>
8751
8752         * support.cs (ReflectionParameters.ParameterModifier): Use
8753         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
8754         and `ParameterAttributes.In'.  Fixes #74884.
8755
8756 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
8757
8758         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
8759         
8760         * expression.cs (Argument.GetParameterModifier): Turned to property.
8761         (Invocation.Error_InvalidArguments): Add more descriptive errors.
8762         
8763         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
8764         its C# equivalent.
8765         
8766 2005-05-09  Raja R Harinath  <rharinath@novell.com>
8767
8768         Fix #74852.
8769         * decl.cs (MemberCache.AddMethods): Register override methods,
8770         rather than non-override methods.
8771         * typemanager.cs (RegisterOverride): New.
8772         (IsOverride): Update.
8773
8774 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
8775
8776         Fix #73105.
8777         
8778         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
8779         recursive declaration.
8780         
8781         * statement.cs (Block.ResolveMeta): Report any error in resolving.
8782         
8783 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
8784
8785         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
8786         
8787         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
8788
8789 2005-05-05  Raja R Harinath  <rharinath@novell.com>
8790
8791         Fix #74797.
8792         * decl.cs (DeclSpace.FamilyAccessible): 
8793         Use TypeManager.IsNestedFamilyAccessible.
8794
8795         Fix reopened #64812.
8796         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
8797         internal'.
8798
8799 2005-05-04  Raja R Harinath  <rharinath@novell.com>
8800             Abin Thomas  <projectmonokochi@rediffmail.com>
8801             Anoob V E  <projectmonokochi@rediffmail.com>
8802             Harilal P R  <projectmonokochi@rediffmail.com>
8803
8804         Fix #64812.
8805         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
8806         allow access to all static members.
8807
8808 2005-05-04  Martin Baulig  <martin@ximian.com>
8809
8810         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
8811
8812 2005-05-04  Martin Baulig  <martin@ximian.com>
8813
8814         Fix #74655.
8815
8816         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
8817         section at the end; make things work if `default' is not the last
8818         section.        
8819
8820 2005-05-04  Martin Baulig  <martin@ximian.com>
8821
8822         Fix #70400.
8823
8824         * statement.cs (Switch): Replaced the `got_default' field with a
8825         `default_section' one.
8826         (Switch.CheckSwitch): Set `default_section' here.
8827         (Switch.Resolve): If we're a constant switch and the constant is
8828         not found, use the default section.
8829
8830 2005-05-03  Martin Baulig  <martin@ximian.com>
8831
8832         * expression.cs (ArrayAccess.EmitGetLength): New public method.
8833
8834         * statement.cs (Foreach.ArrayForeach): New nested class.
8835         (Foreach.TemporaryVariable): New nested class.
8836         (Foreach.EmitArrayForeach): Removed; this is now in the new
8837         ArrayForeach class.
8838
8839 2005-05-03  Raja R Harinath  <rharinath@novell.com>
8840
8841         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
8842         more conservative.
8843         (VerifyPendingMethods): Revert change below.
8844
8845         * typemanager.cs (IsOverride, RegisterNonOverride): New.
8846         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
8847         that used to trigger warning -28.  Remove warning -28.
8848         * expression.cs (Invocation.OverloadResolve): Use
8849         TypeManager.IsOverride to distinguish override methods.
8850
8851         Fix #74773.
8852         * pending.cs (VerifyPendingMethods): If a base type implements the
8853         requested interface, don't bother checking individual methods of
8854         the base type.  As a side-effect, this prevents the creation of
8855         unnecessary proxies.
8856
8857 2005-05-02  Martin Baulig  <martin@ximian.com>
8858
8859         Fix #70182.
8860
8861         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
8862         Also `And' the locals if the old vector is null.
8863         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
8864         null; in this case we basically reset all the variables.        
8865
8866 2005-05-02  Martin Baulig  <martin@ximian.com>
8867
8868         Fix #74529.
8869
8870         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
8871         Added `FlowBranching branching' argument; always `and' the
8872         variables instead of `or'ing them unless we're an infinite loop.
8873
8874         * statement.cs (While.Resolve): Create a new sibling unless we're
8875         infinite.       
8876
8877 2005-05-02  Martin Baulig  <martin@ximian.com>
8878
8879         Fix #70140.
8880
8881         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
8882         arguments; use it instead of creating a new TopLevelBlock.
8883         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
8884         our ConstructorInitializer.
8885
8886         * statement.cs
8887         (TopLevelBlock.TopLevelBranching): New public property.
8888         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
8889         and create our `TopLevelBranching'.
8890
8891         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
8892         anonymous method host, use `block.TopLevelBranching' rather than
8893         creating a new branching.
8894
8895 2005-04-20  Miguel de Icaza  <miguel@novell.com>
8896
8897         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
8898         a ScopeInfo, if any of the current children is a child of the new
8899         entry, move those children there.
8900
8901 2005-04-30  Martin Baulig  <martin@ximian.com>
8902
8903         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
8904         at the beginning of a SwitchSection.  Fix #73335.
8905
8906 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
8907
8908         Fix #74378
8909         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
8910         
8911         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
8912         (FieldExpr.DoResolve): Obsolete members are ignored for field
8913         initializers.
8914         
8915 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
8916
8917         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
8918         of arrays detection.
8919
8920         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
8921         verification.
8922         (Field.VerifyClsCompliance): Volatile fields are not compliant.
8923
8924         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
8925         arrays report.
8926
8927 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
8928
8929         * cs-parser.jay: Use the prefered version of -unsafe in error
8930         message.
8931
8932 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
8933
8934         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
8935         circumstances.
8936
8937 2005-04-20  John Luke  <john.luke@gmail.com>
8938
8939         * driver.cs: fix typo in error message, --outout to --output
8940
8941 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
8942
8943         * codegen.cs (InRefOutArgumentResolving): New field.
8944         
8945         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
8946         fields outside contructor.
8947         
8948         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
8949         
8950 2005-04-19  Miguel de Icaza  <miguel@novell.com>
8951
8952         * anonymous.cs (CaptureContext.EmitParameterInstance): The
8953         parameter code was not completed ever, so it was not as up-to-date
8954         as local variables.  Must finish it.
8955
8956         The bug fix was to compare the Toplevel of the block, not the
8957         current block.  Thanks for Ben for pointing this out. 
8958
8959 2005-04-19  Raja R Harinath  <rharinath@novell.com>
8960
8961         * decl.cs (AddMethods): Use the declaring type of the problem
8962         method to determine if we want to squash a warning.
8963
8964 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
8965
8966         * attribute.cs: Removed debug output.
8967
8968         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
8969         
8970         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
8971         Report.Stderr.
8972         
8973 2005-04-18  Raja R Harinath  <rharinath@novell.com>
8974
8975         Fix #74481.
8976         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
8977         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
8978         all null comparisons against reference types.
8979
8980 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
8981
8982         Fix# 74565
8983         * class.cs (TypeContainer.CircularDepException) New nested
8984         exception class.
8985         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
8986         (TypeContainer.DefineType): Removed error, reset InTransit before
8987         exit.
8988         (Class.DefineType): Throw exception when is in Transit.
8989         Catch exception and report error.
8990         (Struct.DefineType): Throw exception when is in Transit.
8991         Catch exception and report error.
8992         (Interface.DefineType): Throw exception when is in Transit.
8993         Catch exception and report error.
8994
8995         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
8996         handle nested exception handlers.
8997
8998         * flowanalysis.cs (InTryWithCatch): New method, search for try with
8999         a catch.
9000
9001         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
9002         InFinally and InCatch storage.
9003
9004         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
9005         (Catch.Resolve): Set and Restore ec.InCatch.
9006         (Try.Resolve): Set and Restore ec.InFinally.
9007         (Try.HasCatch): True when try has catch.
9008
9009 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
9010
9011         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
9012           for the same event member, so exclude such cases from warning 419.
9013           Fixed bug #74633.
9014
9015 2005-04-16  Miguel de Icaza  <miguel@novell.com>
9016
9017         * expression.cs (Binary.ResolveOperator): Apply patch from John
9018         Luke to fix bug 59864: operators &, | and ^ on enumerations
9019         require that the same enum type on both sides.
9020
9021         * driver.cs: Add warnings to old flag usage, this is to assist
9022         people who produce Makefiles and hope that the Makefiles will be
9023         used on Windows.
9024
9025         * class.cs (TypeContainer.EmitType): Moved the definition of the
9026         special $PRIVATE$ field from the resolve phase to the Emit phase.
9027         During resolve we do not know if we are a struct with
9028         HasExplicitLayout, we know this only after the attributes for the
9029         type are emitted.
9030
9031         Set the FieldOffset to zero on the dummy field that we create for
9032         the class.   Fixes 74590.
9033
9034 2005-04-16  Raja R Harinath  <rharinath@novell.com>
9035
9036         Fix #73834.
9037         * ecore.cs (PropertyExpr.resolved): New.
9038         (DoResolve): Use it to handle a case of double resolution here.
9039         Handle a case of identical-name-and-type-name.
9040         * expression.cs (ArrayCreation.CheckIndices): Avoid double
9041         resolution by storing the results of expression resolution back
9042         into the "probes" array.
9043
9044 2005-04-15  Raja R Harinath  <rharinath@novell.com>
9045
9046         Fix cs0208-7.cs and cs0208-8.cs.
9047         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
9048         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
9049         error reporting to point out the reason a struct is not unmanaged.
9050
9051 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
9052
9053         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
9054           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
9055
9056 2005-04-13  Raja R Harinath  <rharinath@novell.com>
9057
9058         Fix #74528.
9059         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
9060         IdenticalNameAndTypeName here.
9061         (EventExpr.InstanceResolve): Likewise.
9062
9063 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
9064
9065         C# 2.0 DefaultCharSetAttribute implementation
9066         
9067         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
9068         which allows us to set GlobalNamespace for every resolve.
9069         (Attribute.ResolveArguments): Cut from Resolve.
9070         (Attribute.GetCharSetValue): Returns CharSet named argument.
9071         (Attribute.DefinePInvokeMethod): Gets default charset from
9072         module settings.
9073         (GlobalAttribute.ResolveAsTypeStep): Override.
9074         (GlobalAttribute.ResolveArguments): Override.
9075         
9076         * class.cs (TypeAttr): Is protected.
9077         
9078         * codegen.cs (ModuleClass.DefaultCharSet): New member.
9079         (ModuleClass.DefaultCharSetType): New memeber.
9080         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
9081         
9082         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
9083         charset from module.
9084         
9085         * delegate.cs (TypeAttr): Override.
9086         (Delegate.DefineType): Use this TypeAttr.
9087         
9088         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
9089         at very early stage (before types are defined) to resolve model
9090         module attributes. It will probably not work with corlib but it
9091         should be ok.
9092         
9093         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
9094         charset from module.
9095         
9096         * typemanager.cs (default_charset_type): New type.
9097
9098 2005-04-13  Raja R Harinath  <rharinath@novell.com>
9099
9100         * decl.cs (MemberCache.AddMethods): Don't warn if
9101         System.Object.Finalize has buggy MethodAttributes.
9102
9103         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
9104         removed below.
9105
9106 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
9107
9108         * doc.cs : detect ambiguous reference to overloaded members.
9109           Fixed bug #71603. MS 1.1 csc does not detect it.
9110
9111 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
9112
9113         * doc.cs : delegates must not be referenced with parameters.
9114           Fixed bug #71605.
9115
9116 2005-04-12  Miguel de Icaza  <miguel@novell.com>
9117
9118         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
9119
9120 2005-04-10  Miguel de Icaza  <miguel@novell.com>
9121
9122         * driver.cs (MainDriver): Stop processing if the CLS stage found
9123         errors. 
9124
9125         (CompilerCallableEntryPoint.InvokeCompiler): Always
9126         reset after execution;   Take a TextWriter argument for the
9127         output.
9128
9129         * report.cs: Use the error stream instead of hardcoding stderr. 
9130
9131 2005-04-09  Miguel de Icaza  <miguel@novell.com>
9132
9133         * class.cs: Reduce code paths to test, too small of an
9134         optimization to make it worth the extra testing.  Always perform
9135         it. 
9136
9137 2005-04-08  Raja R Harinath  <rharinath@novell.com>
9138
9139         Fix #74510.
9140         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
9141         operators that had errors reported on them.
9142
9143 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
9144
9145         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
9146         argument types.
9147         (Attribute.Resolve): Add named argument type checking.
9148         
9149         * class.cs (FixedField.Define): Use IsPrimitiveType
9150         
9151         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
9152         
9153         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
9154         unsafe parameter types.
9155         
9156         * statement.cs (Using.ResolveExpression): Add better error description.
9157         
9158         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
9159         
9160 2005-04-08  Raja R Harinath  <rharinath@novell.com>
9161
9162         Fix #74484.
9163         * attribute.cs (Attribute.GetAttributeUsage): Resolve
9164         AttributeUsageAttribute in the emitcontext of the attribute class,
9165         not in the emitcontext of the attributable entity it was attached to.
9166         * cs-parser.jay: Use 'current_class', not 'current_container',
9167         when creating a GlobalAttribute.
9168
9169 2005-04-08  Alp Toker  <alp@atoker.com>
9170
9171         * pending.cs: The fix to #58413 failed to compile methods implementing
9172         interfaces with/without params modifiers and vice versa, even though
9173         params modifiers aren't part of the signature. Make the modifier check
9174         less strict as in csc.
9175
9176 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
9177             Anoob V E  <projectmonokochi@rediffmail.com>
9178             Harilal P R  <projectmonokochi@rediffmail.com>
9179
9180         Fix #58413.
9181         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
9182         modifiers of pending methods.
9183         (PendingImplementation.PendingImplementation): Initialize it.
9184         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
9185         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
9186         with ParameterData.  Add check for modifiers.
9187         * class.cs (MethodData.Define): Update to changes.
9188
9189 2005-04-07  Raja R Harinath  <rharinath@novell.com>
9190
9191         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
9192
9193 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
9194
9195         * class.cs (PropertyMethod.Define): Check private accessor in abstract
9196         property.
9197         
9198         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
9199         
9200         * rootcontext.cs,
9201         * typemanager.cs: Registered RequiredAttributeAttribute.
9202         
9203 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
9204
9205         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
9206         Warning CS0169 is back at level 3.
9207         (IMethodData.SetMemberIsUsed): New method.
9208         
9209         * decl.cs (IsUsed): New value; moved from FieldBase.Status
9210         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
9211         
9212         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
9213
9214         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
9215         contants.
9216         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
9217         is used.
9218         
9219         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
9220         is used.
9221         
9222         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
9223         to avoid the problems with nested types.
9224
9225 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
9226             Anoob V.E  <projectmonokochi@rediffmail.com>
9227             Harilal P.R  <projectmonokochi@rediffmail.com>
9228             Raja R Harinath  <rharinath@novell.com>
9229
9230         Fix #73820.
9231         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
9232         attribute.
9233         * typemanager (GetConstructor): Make public.
9234
9235 2005-04-05  John Luke  <john.luke@gmail.com>
9236             Raja R Harinath  <rharinath@novell.com>
9237
9238         Fix #62232.
9239         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
9240         struct too.  Return false quicker in a few cases.
9241         (VerifyUnManaged): Use it.
9242
9243 2005-04-05  Raja R Harinath  <rharinath@novell.com>
9244
9245         Fix #74041.
9246         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
9247         not 'unreachable_seen'.
9248
9249 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
9250
9251         * attribute.cs (Attribute.GetValue): Removed unused.
9252         
9253         * codegen.cs (CodeGen.TrimExt): Removed unused.
9254         
9255         * cs-parser.jay (output): Removed unused.
9256         
9257         * cs-tokenizer.cs (hex_digits): Removed unused.
9258         
9259         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
9260         
9261         * expression.cs (Indirection.LoadExprValue): Removed unused.
9262         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
9263         
9264         * iterators.cs (Iterator.param_types): Removed unused.
9265         
9266         * statement.cs (Goto.block): Removed unused.
9267         (ToplevelBlock.did): Removed unused.
9268         (Switch.ResolveConstantSwitch): Removed unused.
9269
9270 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
9271
9272         * rootcontext.cs: Allow mcs to bootstrap with the compilation
9273         resetting thingy.
9274
9275 2005-04-01  Raja R Harinath  <rharinath@novell.com>
9276
9277         Fix #74232 and cs0208-3.cs.
9278         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
9279         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
9280         unmanaged type.  Don't use FieldBuilders when 't' is a
9281         TypeBuilder.  Use ModFlags and MemberType fields.
9282         * class.cs (MemberBase.member_type): Rename from MemberType.
9283         (MemberBase.MemberType): New property.  Determines member_type on
9284         demand.
9285         (MemberBase.DoDefine): Don't initialize MemberType here.
9286         (FieldMember.Define): Likewise.
9287
9288 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
9289
9290         Fix #74241
9291         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
9292         Attributes are emitted there.
9293         
9294 2005-04-01  Raja R Harinath  <rharinath@novell.com>
9295
9296         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
9297         keyword in 'partial enum' too.
9298         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
9299         is not allowed).
9300         Report from Kamil Skalski <nazgul@omega.pl>.
9301
9302         Fix #74309.
9303         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
9304         have partial containers too.
9305
9306         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
9307         in block' checks to Block.CheckInvariantMeaningInBlock.
9308         * statement.cs (Block.GetKnownVariableInfo): Make private.
9309         (Block.IsVariableUsedInChildBlock): Remove.
9310         (Block.IsVariableUsedInBlock): Likewise.
9311         (Block.CheckInvariantMeaningInBlock): New.  Show location of
9312         conflicting declaration.
9313         (Block.AddVariable): Make error messages less long-winded and more
9314         specific.  Show location of conflicting declaration.
9315         * parameter.cs (Parameters.Location): New readonly property.
9316
9317 2005-03-31  Raja R Harinath  <rharinath@novell.com>
9318
9319         Clean up semantics of invoking ResolveMemberAccess.
9320         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
9321         can have an instance, ensure that we pass in a non-TypeExpression
9322         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
9323         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
9324         argument.  Update to changes and simplify.
9325         (FieldExpr.Emitinstance): Remove CS0120 check.
9326         (PropertyExpr.EmitInstance): Likewise.
9327         * expression.cs (Argument.Resolve): Likewise.
9328         (Invocation.DoResolve): Update to changes in semantics of
9329         InstanceExpression.
9330
9331 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
9332
9333         Fix #74241
9334         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
9335         customization.
9336         
9337         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
9338
9339 2005-03-31  Raja R Harinath  <rharinath@novell.com>
9340
9341         Fix difference in behaviour with commandline invocation.
9342         * driver.cs (Driver.Reset): New.
9343         (CompilerCallableEntryPoint): Call it.
9344
9345         * statement.cs (If.Resolve): Avoid spurious "uninitialized
9346         variable" warnings if the boolean expression failed to resolve.
9347
9348 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
9349
9350         * attribute.cs: Fix the union of several permissions when some of them
9351         are unrestricted (so the result isn't an unrestricted permission set).
9352         Fix #74036.
9353
9354 2005-03-30  Raja R Harinath  <rharinath@novell.com>
9355
9356         * ecore.cs (MemberExpr): New class.  Convert from interface
9357         IMemberExpr.
9358         (MemberExpr.ResolveMemberAccess): Refactor and move here from
9359         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
9360         error checks.
9361         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
9362         (MethodGroupExpr.IsExplicitImpl): Remove.
9363         (Expression.GetFieldFromEvent): Remove.
9364         (SimpleName.MemberStaticCheck): Remove.
9365         (SimpleName.DoSimpleNameResolve): Update to changes.
9366         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
9367         (MemberAccess.IdenticalNameAndTypeName): Remove.
9368         (MemberAccess.error176): Move to MemberExpr.
9369         (MemberAccess.DoResolve): Update to changes.
9370         (BaseAccess.DoResolve): Likewise.
9371
9372 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
9373
9374         C# 2.0 Conditional attribute class implementation
9375         
9376         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
9377         Analyzes class whether it has attribute which has ConditionalAttribute
9378         and its condition is not defined.
9379         
9380         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
9381         (Class.IsExcluded): New method. Search for at least one defined
9382         condition in ConditionalAttribute of attribute class.
9383
9384 2005-03-30  Raja R Harinath  <rharinath@novell.com>
9385
9386         * ecore.cs (PropertyExpr): Derive from Expression, not
9387         ExpressionStatement.
9388         (PropertyExpr.EmitStatement): Remove.
9389
9390 2005-03-29  Raja R Harinath  <rharinath@novell.com>
9391
9392         Fix #74060.
9393         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
9394         internal field "value__" of an enum be private.  The examples for
9395         "value__" that I found on MSDN all used FieldAttributes.Private.
9396
9397         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
9398         Don't mention IL method attribute names.
9399
9400         Fix #47991.  Remove a TODO.
9401         * statement.cs (Block.Toplevel): Make into a field.
9402         (Block.Parameters): Move into ToplevelBlock.
9403         (Block.known_variables): Rename from child_variable_names.
9404         (Block.Block): Remove variants that take Parameters.  Initialize
9405         'Toplevel' with the immediately surrounding toplevel block.
9406         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
9407         LocalInfo parameter.
9408         (Block.GetKnownVariableInfo): New.
9409         (Block.IsVariableNameUsedInChildBlock): Update.
9410         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
9411         the block, even though it may not be in scope.
9412         (Block.AddVariable): Remove Parameters parameter.  Use
9413         Toplevel.Parameters instead.
9414         (Block.AddConstant): Remove Parameters parameter.
9415         (Block.GetParameterReference): Update to use Toplevel.Parameters.
9416         (Block.IsParamaterReference): Likewise.
9417         (Block.IsLocalParameter): Likewise.  Simplify a lot.
9418         (ToplevelBlock.Parameters): New.  Moved from Block.
9419         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
9420         initialize Parameters to a non-null value.
9421         * cs-parser.jay: Update to changes.
9422         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
9423         simple names that mean different things in the same block.  Use
9424         Block.IsVariableNameUsedInBlock.
9425
9426 2005-03-28  Raja R Harinath  <rharinath@novell.com>
9427
9428         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
9429         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
9430         GetTypeHandle.  It is possible for a reflected type to derive from
9431         a TypeBuilder (e.g., int[] derives from the TypeBuilder
9432         System.Array during mscorlib compilation).
9433         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
9434         contain a method_hash, don't create one either.  Don't create a
9435         deep copy of the base cache's method_hash.
9436         (MemberCache.SetupCache): Rename back from DeepCopy.
9437         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
9438         already initialized.  If we see an override function, add its
9439         underlying base virtual function to the member_hash too.
9440
9441         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
9442
9443 2005-03-26  Raja R Harinath  <harinath@acm.org>
9444
9445         Fix #73038.
9446         * assign.cs (Assign.DoResolve): When the RHS of an assignment
9447         fails to resolve, ensure that the LHS is still resolved as an
9448         lvalue.
9449
9450 2005-03-25  Raja R Harinath  <harinath@acm.org>
9451
9452         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
9453         ec.ContainerType.
9454         (Enum.current_ec): Remove.
9455         (Enum.LookupEnumValue): Remove EmitContext argument.
9456         Just uses the one created during DefineType.
9457         (Enum.FindMembers): Update.
9458         * expression.cs (MemberAccess.DoResolve): Update.
9459
9460 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
9461
9462         * assign.cs (Assign.DoResolve): Check for CS1717 when
9463         source and target are same (uses Equals).
9464
9465         * expression.cs (LocalVariableReference, ParameterReference,
9466         This): Implemented Equals, GetHashCode.
9467
9468         * statement.cs (Block.GetParameterReference): Removed useless
9469         local variable.
9470
9471 2005-03-22  Raja R Harinath  <rharinath@novell.com>
9472
9473         Fix cs0128.cs
9474         * statement.cs (Block.AddVariable): Ensure that we skip implicit
9475         blocks before deciding whether the error is cs0136 or cs0128.
9476
9477         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
9478         (using_alias_directive, using_namespace_directive): Pass
9479         MemberName, not an expression to Namespace.UsingAlias and
9480         Namespace.Using.
9481         (MakeName): Use the MemberName of the namespace.
9482         * namespace.cs (Namespace.MemberName): New.
9483         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
9484         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
9485         Likewise.
9486         * decl.cs (MemberName.Name): Make readonly.
9487         (MemberName.FromDotted): New "constructor".
9488         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
9489         (MemberCore.Name): Compute from MemberName on demand.
9490         (MemberCore.SetMemberName): Provide a way to change the
9491         MemberName.
9492         (MemberCore.AddToContainer): Don't take a fullname parameter.
9493         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
9494         fully qualified name of the container to the member name.
9495         (TypeContainer.AddToTypeContainer): Use a fully qualified name
9496         only if the type is a member of the root container.
9497         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
9498         MemberName.Left rather than searching for an embedded ".".
9499         (PartialContainer.CreatePart): Update to changes in RootContext.
9500         (MemberBase.ShortName): Turn into a property.  Use
9501         MemberCore.SetMemberName.
9502         (MemberBase.ExplicitInterfaceName): Remove.
9503         (MemberBase.UpdateMemberName): Remove.
9504         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
9505         (PropertyBase.SetMemberName): New override.
9506         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
9507         (Tree.GetDecl): New.
9508         (Tree.AllDecls): Rename from Decls.
9509         * attribute.cs, enum.cs, report.cs: Update to changes.
9510         * driver.cs (MainDriver): Use MemberName.FromDotted on
9511         RootContext.MainClass.
9512
9513 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
9514
9515         * class.cs (FixedField.Define): Check for CS1664 and more sanity
9516         checks.
9517
9518         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
9519
9520 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
9521
9522         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
9523         property accessor modifiers.
9524
9525         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
9526         fixed buffer attribute (CS1716).
9527         (PropertyMethod.HasCustomAccessModifier): When property accessor
9528         has custom modifier.
9529
9530         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
9531         modifiers.
9532         (PropertyExpr.DoResolveLValue): Add CS0272.
9533
9534 2005-03-17  Miguel de Icaza  <miguel@novell.com>
9535
9536         * convert.cs: When converting to a pointer, use the proper Conv.U
9537         or Conv.I depending on the source data type.
9538
9539         * cs-tokenizer.cs: Make the size for large decimal constants,
9540         fixes #72957.
9541
9542 2005-03-17  Martin Baulig  <martin@ximian.com>
9543
9544         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
9545         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
9546
9547 2005-03-17  Martin Baulig  <martin@ximian.com>
9548
9549         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
9550         to bool so we can return an error condition.
9551         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
9552         returned an error.
9553
9554 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
9555
9556         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
9557         attributes.
9558
9559 2005-03-16  Raja R Harinath  <rharinath@novell.com>
9560
9561         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
9562         Refactor to avoid traversing the list of assemblies, and to avoid
9563         string concatenation.
9564         * typemanager.cs (guid_attr_type): Remove.
9565         (negative_hits, pointers, references): Remove hashes.
9566         (type_hash): New.
9567         (GetConstructedType): New.  Uses type_hash to handle constructed
9568         types (arrays, references, pointers).
9569         (GetReferenceType, GetPointerType): Use it.
9570         (GetNestedType): New.  Uses type_hash to handle nested types of
9571         reflected types.
9572         (LookupType, LookupTypeDirect): Remove.
9573         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
9574         'types' hash and LookupTypeReflection directly.
9575         (params_string, params_object): Use GetConstructedType.
9576         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
9577         top-level types.
9578         (Namespace.Lookup): Use cached_types.
9579         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
9580         provided by old TypeManager.LookupType.
9581         * rootcontext.cs (MakeFQN): Remove.
9582         * decl.cs (DeclSpace.MakeFQN): Likewise.
9583         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
9584         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
9585         TypeManager.GetConstructedType.
9586         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
9587
9588 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
9589
9590         * class.cs (MethodCore.CheckBase): Report CS1715 for properties and
9591         indexers.
9592
9593         * cs-parser.jay: Reports CS1527 for any namespace element.
9594
9595         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
9596         Added CS0407.
9597
9598         * expression.cs (ParameterReference.IsAssigned): Changed error to
9599         CS0269.
9600         (Error_WrongNumArguments): Moved CS0245 detection here.
9601
9602         * statement.cs (Return.Resolve): Add CS1622 report.
9603
9604 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
9605
9606         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
9607
9608 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
9609
9610         * attribute.cs expression.cs: Get rid of some allocations.
9611
9612 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
9613
9614         * doc.cs : just eliminate the latest change.
9615
9616 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
9617
9618         * doc.cs : commented out the latest change. It breaks xml-030.cs
9619
9620 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
9621
9622         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
9623           fail. So invoke CreateType() in FindDocumentedType().
9624
9625 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
9626
9627         * cs-tokenizer.cs : added IsKeyword().
9628         * doc.cs : Detect keyword incorrectly used as identifier.
9629           Allow identifiers prefixed by @.
9630
9631 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
9632
9633         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
9634         It caused exception in namespace resolving (again!).
9635         
9636         * class.cs (Class.ctor): Removed exit.
9637         (PropertyMethod.ctor): ditto.
9638         
9639         * codegen.cs (Codegen.Reset): Reset static data.
9640         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
9641         
9642         * cs-tokenizer.cs (Cleanup): Removed.
9643         
9644         * driver.cs (GetSystemDir): Rewrote to one line command.
9645         It caused problem with unloaded dynamic modules.
9646         (UnixParseOption): Removed Exit.
9647         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
9648         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
9649         Now can be mcs used as library.
9650         
9651         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
9652         empty location.
9653         
9654         * location.cs (Reset): Reset static data.
9655         
9656         * namespace.cs (Reset): Reset static data.
9657         
9658         * report.cs (Report.Reset): Reset static data.
9659         
9660         * rootcontext.cs (RootContext.Reset): Reset static data.
9661         
9662         * tree.cs (RootTypes.ctor): Use Location.Null
9663         
9664         * typemanager.cs (TypeManager.Reset): Reset static data.
9665         (CoreLookupType): Removed Exit.
9666         (TypeHandle.Reset): Reset static data.
9667         
9668 2005-03-10  Raja R Harinath  <rharinath@novell.com>
9669
9670         Fix #73516.
9671         * typemanager.cs (ComputeNamespaces): Import namespaces from
9672         referenced modules too.
9673
9674 2005-03-09  Raja R Harinath  <rharinath@novell.com>
9675
9676         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
9677         than '.'.
9678
9679 2005-03-09  Raja R Harinath  <rharinath@novell.com>
9680
9681         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
9682         enclosing DeclSpace.  This ensures that a name-lookup populates
9683         more caches and there are fewer 'TypeExpression's.  Carve out
9684         nested type lookup into ...
9685         (LookupNestedTypeInHierarchy): ... this.
9686
9687 2005-03-09  Raja R Harinath  <rharinath@novell.com>
9688
9689         Clean up a few partial-class semantics.  
9690         Fixes test-357.cs and cs1618-2.cs.
9691         * cs-parser.jay (struct_declaration): Use 'current_class' as
9692         parent of newly-created struct.  Remove call to Register ().
9693         Use 'pop_current_class' to complete handing the current struct.
9694         (interface_declaration): Likewise.
9695         (class_declaration): Likewise.
9696         (enum_declaration): Use 'current_class' as parent of newly created
9697         enum.
9698         (delegate_declaration): Likewise.
9699         (pop_current_class): New function.  This is used to handle closing
9700         up the 'current_class' and 'current_container', and pointing them
9701         to the enclosing class/container.
9702         (CSharpParser): Initialize 'current_class' too.
9703         * decl.cs (MemberCore): Add check for invariant: a partial
9704         container is not a parsed entity, and thus does not enclose any
9705         parsed members.
9706         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
9707         (DeclSpace.BaseTypeExpr): Use it.
9708         (DeclSpace.LookupType): Add check for invariant.
9709         * class.cs (TypeContainer): Add check for invariant: a nested
9710         class should have the same NamespaceEntry as its enclosing class.
9711         (TypeContainer.EmitFieldInitializers): Make virtual.
9712         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
9713         MemberCore.
9714         (TypeContainer.Register): Remove.
9715         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
9716         null.  Use TypeResolveEmitContext for resolving base types and
9717         interfaces.  Move initialization of Parts.TypeBuilder here from
9718         ...
9719         (TypeContainer.DefineNestedTypes): ... here.
9720         (PartialContainer): Take a Namespace not a NamespaceEntry.
9721         (PartialContainer.Create): Don't use Register.  Call the
9722         appropriate Add... function directly.
9723         (ClassPart): Take both the PartialContainer and the enclosing
9724         class as constructor arguments.
9725         (ClassPart.EmitFieldInitializers): Override.
9726         (ClassPart.PartFindNestedTypes): Remove.
9727         (FieldBase.GetInitializerExpression): Resolve the initializer
9728         expression in the emit context of the enclosing class.
9729         * tree.cs (RootTypes): Remove Register ().
9730         
9731 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
9732
9733         * cs-parser.jay: Removed CS0134.
9734         
9735         * driver.cs: Removed CS1901.
9736         
9737         * expression.cs (SizeOf.DoResolve): Don't report CS0233
9738         for predefined types.
9739
9740 2005-03-07  Duncan Mak  <duncan@novell.com>
9741
9742         * codegen.cs (Save):  Catch UnauthorizedAccessException as
9743         well. Fixes bug #73454.
9744
9745 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
9746
9747         * cs-tokenizer.cs (xtoken): Add CS1035.
9748         
9749         * class.cs (MethodData.Define): Add CS0683.
9750         (FieldMember.ctor): Add CS0681.
9751
9752 2005-03-07  Raja R Harinath  <rharinath@novell.com>
9753
9754         * ecore.cs (SimpleName.DoResolve): Rename from
9755         SimpleName.DoResolveAllowStatic.
9756         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
9757         Pass 'intermediate' flag to MemberStaticCheck.
9758         (SimpleName.MemberStaticCheck): Skip "static check" only in case
9759         of "intermediate" lookups via MemberAccess.
9760         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
9761         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
9762
9763 2005-03-07  Raja R Harinath  <rharinath@novell.com>
9764
9765         Fix #73394.
9766         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
9767         slipped in because of variable names that are identical to a
9768         builtin type's BCL equivalent ('string String;', 'int Int32;').
9769         (PropertyExpr.EmitInstance): Likewise.
9770
9771 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
9772
9773         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
9774         
9775         * report.cs (warning_ignore_table): Made public.
9776
9777 2005-03-04  Raja R Harinath  <rharinath@novell.com>
9778
9779         Fix #73282.
9780         * class.cs (MethodData.Emit): Pass 'container' to
9781         container.GetObsoleteAttribute instead of 'container.Parent'.
9782
9783 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
9784
9785         * cs-parser.jay: Add 1534 error test.
9786
9787         * iterators.cs (Yield.CheckContext): Add error 1629.
9788         (Iterator.ctor): Save unsafe modifier.
9789         (MoveNextMethod.DoEmit): Restore unsafe context.
9790
9791         * namespace.cs (UsingAlias): Better error message.
9792
9793 2005-03-03  Dan Winship  <danw@novell.com>
9794
9795         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
9796         the warning message [#73219]
9797
9798 2005-03-03  Raja R Harinath  <rharinath@novell.com>
9799
9800         Fix compile with MCS 1.0.0.0.
9801         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
9802         w_restore to not depend on string constant folding.
9803
9804 2005-03-03  Raja R Harinath  <rharinath@novell.com>
9805
9806         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
9807         CS0246 check to users who passed 'silent = false'.
9808         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
9809         check.
9810         (SimpleName.SimpleNameResolve): Update.
9811         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
9812         (MemberAccess.IdenticalNameAndTypeName): Update.
9813         * doc.cs (FindDocumentedTypeNonArray): Update.
9814
9815 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
9816
9817         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
9818         * parameters.cs (ComputeAndDefineParameters): Remove.
9819         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
9820         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
9821         Use GetParameterInfo.
9822
9823 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
9824
9825         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
9826
9827 2005-03-02  Raja R Harinath  <rharinath@novell.com>
9828
9829         Unify DeclSpace.LookupType and DeclSpace.FindType.
9830         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
9831         is in charge of defining nested types on demand.
9832         (DeclSpace.LookupType): Use it when the current_type is a
9833         TypeBuilder.  Use LookupTypeDirect for reflected types.
9834         (DeclSpace.FindType): Remove.
9835         (DeclSpace.LookupInterfaceOrClass): Likewise.
9836         (DeclSpace.DefineTypeAndParents): Likewise.
9837         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
9838         DeclSpace.LookupType.
9839         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
9840         * typemanager.cs (LookupType): Simplify.
9841         (AddUserType): Remove type from negative_hits.
9842         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
9843         * class.cs (TypeContainer.FindMembers): Move handling of nested
9844         types ...
9845         (TypeContainer.FindMembers_NestedTypes): ... here.
9846         (TypeContainer.FindNestedType): Implement override.
9847         (ClassPart.FindNestedType): Delegate to PartialContainer.
9848         (ClassPart.PartFindNestedType): Looks up the nested types of the
9849         part alone.
9850
9851 2005-03-02  Martin Baulig  <martin@ximian.com>
9852
9853         * class.cs (TypeContainer.DoDefineMembers): We also need a default
9854         static constructor in static classes.
9855
9856 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
9857
9858         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
9859         sizeParamIndex is not specified.
9860
9861 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
9862
9863         Fix #73117
9864         * report.cs (WarningMessage.IsEnabled): Missing null check.
9865
9866 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
9867
9868         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
9869         in the fields and not in the properties.
9870
9871 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
9872
9873         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
9874         fields as well.
9875
9876 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
9877
9878         * attribute.cs: Small refactoring (improved robustness).
9879         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
9880         (ValidateGuid): Removed.
9881         (Resolve): Removed referenced to above mentioned.
9882         (GetAttributeUsage): Made private and changed to work without
9883         class assistance.
9884         (GetIndexerAttributeValue): Don't crash.
9885         (GetConditionalAttributeValue): Ditto.
9886         (GetClsCompliantAttributeValue): Ditto.
9887         (ExtractSecurityPermissionSet): All attributes exceptions are
9888         error 648.
9889         (GetPropertyValue): New helper.
9890         (GetMethodImplOptions): New method.
9891         (DefinePInvokeMethod): Reuse common code. Implemented handling of
9892         some missing properties.
9893         
9894         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
9895         (Method.ApplyAttributeBuilder): Updated.
9896         
9897         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
9898         exception.
9899
9900 2005-02-28  Raja R Harinath  <rharinath@novell.com>
9901
9902         Fix #73052.
9903         * report.cs (Report.SymbolRelatedToPreviousError): Handle
9904         non-simple types (array, pointer, reference).
9905
9906 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
9907
9908         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
9909
9910         * class.cs (MethodCore.IsDuplicateImplementation): Special error
9911         for operators.
9912         (Method.CheckBase): Catch wrong destructor here.
9913         (MethodData.Define): Add errors 550, 668.
9914
9915         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
9916
9917         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
9918
9919         * pending.cs (VerifyPendingMethods): Add error 551.
9920
9921         * typemanager.cs (CSharpName): Next error report helper.
9922
9923 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
9924
9925         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
9926         attributes. Removed useless attribute double check.
9927         It saves almost 2MBs for corlib.
9928
9929 2005-02-25  Raja R Harinath  <rharinath@novell.com>
9930
9931         Fix #72924.
9932         * statement.cs (ExpressionStatement.Resolve): Make robust to being
9933         called twice in case of error.
9934
9935 2005-02-23  Chris Toshok  <toshok@ximian.com>
9936
9937         Fix compiler portions of #72827.
9938         * statement.cs (Block.Emit): call Begin/EndScope on the
9939         EmitContext instead of the ILGenerator.
9940
9941         * codegen.cs (EmitContext.BeginScope): new method, call
9942         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
9943         we have one.)
9944         (EmitContext.BeginScope): same, but EndScope and CloseScope
9945
9946         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
9947         offset and call the superclass's OpenScope(int) with it.
9948         (SymbolWriter.CloseScope): get the current il
9949         offset and call superclass's CloseScope(int) with it.
9950
9951 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
9952
9953         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
9954         CS1677 for out and ref as well.
9955
9956         * class.cs (Method.Define): Add error CS1599 detection.
9957         
9958         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
9959         
9960         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
9961         
9962         * delegate.cs (Delegate.Define): Add error CS1599 detection.
9963         
9964         * support.cs.cs (ModifierDesc): New helper method.
9965
9966 2005-02-23  Raja R Harinath  <rharinath@novell.com>
9967             Abin Thomas  <projectmonokochi@rediffmail.com>
9968             Anoob V E  <projectmonokochi@rediffmail.com>
9969             Harilal P R  <projectmonokochi@rediffmail.com>
9970
9971         Fix #57851, #72718.
9972         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
9973         MemberLookup (used for error reporting) actually returns a result.
9974         Fix error report number (122, not 112).
9975
9976 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
9977             Anoob V E  <projectmonokochi@rediffmail.com>
9978             Harilal P R  <projectmonokochi@rediffmail.com>
9979
9980         Fix #71134.
9981         * pending.cs (PendingImplementation.GetAbstractMethods):
9982         Find NonPublic members too.
9983
9984 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
9985
9986         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
9987         Fixed error 217.
9988         
9989         * class.cs (MethodCore.CheckMethodAgainstBase):
9990         Add error 239 report.
9991
9992 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9993
9994         Fix #68955.
9995         * expression.cs (Invocation.IsApplicable): Make public.
9996         (Invocation.IsParamsMethodApplicable): Likewise.
9997         * delegate.cs (Delegate.VerifyApplicability): Don't use
9998         Invocation.VerifyArgumentCompat for parameter applicability
9999         testing.  Use Invocation.IsApplicable and
10000         Invocation.IsParamsMethodApplicable.
10001
10002 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
10003
10004         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
10005         
10006         * class.cs (Operator.Define): Add error 217 report.
10007         
10008 2005-02-21  Raja R Harinath  <rharinath@novell.com>
10009
10010         * namespace.cs (UsingEntry.Resolve): Undo change below.
10011
10012 2005-02-21  Raja R Harinath  <rharinath@novell.com>
10013
10014         Fix #72756.
10015         * ecore.cs (Expression.MemberLookupFailed): Add argument to
10016         disable the error message when the extended MemberLookup also
10017         fails.
10018         (Expression.MemberLookupFinal): Update.
10019         (SimpleName.DoSimpleNameResolve): Update.
10020         * expression.cs (MemberAccess.ResolveNamespaceOrType):
10021         Don't use MemberLookupFinal.
10022         (New.DoResolve): Update.
10023         (BaseAccess.CommonResolve): Update.
10024
10025 2005-02-21  Raja R Harinath  <rharinath@novell.com>
10026
10027         Fix #72732.
10028         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
10029         occured previously, don't resolve again.
10030
10031 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
10032
10033         Fix #69949
10034         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
10035         argument. Call ResolveAttributeUsage for unresolved.
10036         when types doesn't match ctor arguments.
10037         
10038         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
10039         for nested attribute classes.
10040         (Class.attribute_usage): Removed.
10041         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
10042         for attribute class.
10043         
10044         * ecore.cs (IsAttribute): Removed.
10045         
10046         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
10047         
10048         * rootcontext.cs (RegisterAttribute): Removed, attributes are
10049         now normal types.
10050         (attribute_types): Removed.
10051         (EmitCode): Global attributes are emited as the latest.
10052
10053 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
10054
10055         * class.cs (EmitFieldInitializers): Don't emit field initializer
10056         for default values when optimilization is on.
10057         
10058         * constant.cs (Constant.IsDefaultValue): New property.
10059         
10060         * driver.cs: Add /optimize handling.
10061         
10062         * constant.cs,
10063         * ecore.cs,
10064         * literal.cs: Implement new IsDefaultValue property.
10065         
10066         * rootcontext.cs (Optimize): New field, holds /optimize option.
10067
10068 2005-02-18  Raja R Harinath  <rharinath@novell.com>
10069
10070         Fix crasher in re-opened #72347.
10071         * namespace.cs (Namespace.Lookup): Return null if
10072         DeclSpace.DefineType returns null.
10073
10074         Fix #72678.
10075         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
10076
10077 2005-02-18  Raja R Harinath  <rharinath@novell.com>
10078
10079         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
10080         now returns null if it cannot resolve to an lvalue.
10081         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
10082         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
10083         returned null.  Remove check for SimpleName.
10084         (EventExpr.DoResolveLValue): New.
10085         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
10086         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
10087         error from ...
10088         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
10089         avoid CS0131 error.
10090         (Unary.ResolveOperator): Move CS0211 check ...
10091         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
10092         CS0131 error.
10093         (Unary.DoResolveLValue): Simplify.
10094         (AddressOf.DoResolveLValue): New.
10095         (ArrayAccess.DoResolveLValue): New.
10096
10097 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
10098
10099         * attribute.cs (Attribute.Resolve): Add arguments casting for
10100         when types doesn't match ctor arguments.
10101
10102 2005-02-16  Raja R Harinath  <rharinath@novell.com>
10103
10104         Fix parts of #63202.
10105         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
10106         lookup of operator in base type.  Ensure that all checks happen
10107         when the operator resolves to an "op_..." method.
10108
10109 2005-02-15  Raja R Harinath  <rharinath@novell.com>
10110
10111         Fix #71992.
10112         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
10113         'ignore_cs0104' parameter.  Pass it to ...
10114         (NamespaceEntry.Lookup): ... this.
10115         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
10116         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
10117         (TypeLookupExpression.DoResolveAsTypeStep): Update.
10118         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
10119         Update.  Request that cs0104 errors be ignored.
10120         (ComposedCast.ResolveAsTypeStep): Update.
10121
10122 2005-02-14  Raja R Harinath  <rharinath@novell.com>
10123
10124         Fix #59209.
10125         * expression.cs (Invocation.BetterFunction): Remove support for
10126         comparing virtual functions and their overrides.
10127         (Invocation.IsOverride): New.
10128         (Invocation.OverloadResolve): Don't consider 'override' functions
10129         during candidate selection.  Store them in a lookaside list.
10130         If the selected method is a 'virtual' function, use the list to
10131         find any overrides that are closer to the LHS type.
10132
10133 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
10134
10135         * expression.cs (New.DoResolve): Add complex core type reduction.
10136         (New.Constantify): Converts complex core type syntax like 'new int ()'
10137         to simple constant.
10138         
10139 2005-02-14  Raja R Harinath  <rharinath@novell.com>
10140
10141         * decl.cs (EntryType.EntryType): New constructor to create an
10142         updated copy of a cache entry.
10143         (MemberCache.AddMethods): Use it.
10144         (MemberCache.ClearDeclaredOnly): Remove.
10145         (MemberCache.MemberCache): Update.
10146
10147 2005-02-11  Miguel de Icaza  <miguel@novell.com>
10148
10149         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
10150         variable.  This one is represents the actual low-level declaration
10151         of the method, as opposed to the semantic level `IsStatic'.   
10152
10153         An anonymous method which is hosted into a static method might be
10154         actually an instance method.  IsStatic would reflect the
10155         container, while MethodIsStatic represents the actual code
10156         generated.
10157
10158         * expression.cs (ParameterReference): Use the new MethodIsStatic
10159         instead of IsStatic.
10160
10161         * anonymous.cs (AnonymousMethod.Compatible): Pass the
10162         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
10163         set on the current EmitContext. 
10164
10165         * expression.cs (Cast): Overload DoResolveLValue so we can pass
10166         resolve our casted expression as an LValue.  This triggers the
10167         proper LValue processing that is later required by Assign.
10168
10169         This fixes 72347.
10170
10171         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
10172
10173 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
10174
10175         C# 2.0 Fixed buffer implementation
10176
10177         * anonymous.cs: Update after RegisterHelperClass renaming.
10178
10179         * attribute.cs (AttributeTester.fixed_buffer_cache):
10180         Cache of external fixed buffers.
10181         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
10182         implementation if field is fixed buffer else null.
10183
10184         * class.cs
10185         (TypeContainer.AddField): Accept FieldMember instead of Field.
10186         (FieldBase.IsFieldClsCompliant): Extracted code from
10187         VerifyClsCompliance descendant customization.
10188         (FixedField): New class handles fixed buffer fields.
10189         (FixedFieldExternal): Keeps information about imported fixed
10190         buffer.
10191         (IFixedField): Make access to internal or external fixed buffer
10192         same.
10193
10194         * cs-parser.jay: Add fixed buffer parsing.
10195
10196         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
10197         buffer.
10198
10199         * expression.cs (Indirection): Extended implementation to accept
10200         fixed buffer field.
10201         (PointerArithmetic.Emit): Get element from fixed buffer as well.
10202         (ElementAccess.MakePointerAccess): Get type as parameter.
10203         (DoResolve): Add fixed buffer field expression conversion.
10204         (DoResolveLValue): Ditto.
10205         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
10206         (ArrayPtr): Derives from FixedBufferPtr.
10207         (ArrayPtr.Emit): Add extra emit for array elements.
10208
10209         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
10210
10211         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
10212         for compiler generated types.
10213         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
10214
10215         * statement.cs (Fixed): Refactored to be easier add fixed buffer
10216         and consume less memory.
10217         (Fixed.Resolve): Add fixed buffer case.
10218
10219         * typemanager.cs (compiler_generated_attr_ctor,
10220         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
10221         (HasElementType): Add our own implementation to work on every
10222         runtime.
10223
10224 2005-02-11  Miguel de Icaza  <miguel@novell.com>
10225
10226         * anonymous.cs (CaptureContext): Track whether `this' has been
10227         referenced.   
10228
10229         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
10230         only captured `this' if it was implicitly done (instance
10231         methods/variables were used). 
10232
10233         * codegen.cs (EmitContext.CaptureThis): New method to flag that
10234         `this' must be captured.
10235
10236 2005-01-30  Miguel de Icaza  <miguel@novell.com>
10237  
10238         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
10239         is null it means that there has been no need to capture anything,
10240         so we just create a sibling.
10241
10242         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
10243
10244         Just a partial fix.  The other half is fairly elusive.
10245         
10246 2005-02-10  Raja R Harinath  <rharinath@novell.com>
10247
10248         Fix #52586, cs0121-4.cs.
10249         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
10250         and return a hashtable.
10251         (MemberCache.ClearDeclaredOnly): New.
10252         (MemberCache.MemberCache): Update to change.  Make a deep copy of
10253         the method_hash of a base type too.
10254         (MemberCache.AddMethods): Adapt to having a deep copy of the base
10255         type methods.  Overwrite entries with the same MethodHandle so
10256         that the ReflectedType is correct.  The process leaves in base
10257         virtual functions and their overrides as distinct entries.
10258         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
10259         matters since it was boxed in a ArrayList before.
10260         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
10261         modifier.
10262         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
10263         case of a virtual function and its override (choose the overload
10264         as better).
10265         (Invocation.OverloadResolve): Avoid 'override' members during
10266         'applicable_type' calculation.
10267
10268 2005-02-09  Raja R Harinath  <rharinath@novell.com>
10269
10270         Combine two near-redundant caches.
10271         * typemanager.cs (method_params): Rename from method_internal_params.
10272         (TypeManager.GetParameterData): New.  Replace
10273         Invocation.GetParameterData.
10274         (TypeManager.LookupParametersByBuilder): Remove.
10275         * expression.cs (Invocation.method_parameter_cache): Remove.
10276         (Invocation.GetParameterData): Remove.
10277         Update to changes.
10278         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
10279         Update to changes.
10280
10281 2005-02-08  Raja R Harinath  <rharinath@novell.com>
10282
10283         Fix #72015.
10284         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
10285         TypeManager.multicast_delegate_type is null, resolve it by looking
10286         up "System.MulticastDelegate".
10287         * rootcontext.cs (RootContext.ResolveCore): Simplify.
10288
10289 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
10290             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
10291             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
10292
10293         Fix cs0164.cs.
10294         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
10295         (LabeledStatement.AddReference): New.  Set 'referenced'.
10296         (Goto.Resolve): Use it.
10297
10298 2005-02-05  John Luke  <john.luke@gmail.com>
10299
10300         * driver.cs: remove duplicate -doc line in Usage ()
10301
10302 2005-02-04  Raja R Harinath  <rharinath@novell.com>
10303
10304         * location.cs (Location.AddFile): Fix CS2002 error report.
10305
10306 2005-02-02  Martin Baulig  <martin@ximian.com>
10307
10308         * delegate.cs (Delegate.DefineType): Report an internal error if
10309         TypeManager.multicast_delegate_type is null.  See bug #72015 for
10310         details.        
10311
10312 2005-02-02  Raja R Harinath  <rharinath@novell.com>
10313
10314         Fix a crasher in a variant of #31984.
10315         * const.cs (Constant.CheckBase): New override that defers the
10316         new-or-override check in case the base type hasn't been populated
10317         yet.
10318         (Constant.Define): Ensure the new-or-override check is performed.
10319
10320 2005-02-01  Duncan Mak  <duncan@ximian.com>
10321
10322         * const.cs (LookupConstantValue): Check that `ce' is not null
10323         before calling GetValue ().
10324
10325 2005-02-01  Raja R Harinath  <rharinath@novell.com>
10326
10327         Fix test-334.cs (#69519).
10328         * cs-parser.jay (using_alias_directive): Pass in an expression to
10329         NamespaceEntry.UsingAlias.
10330         (using_namespace_directive): Pass in an expression to
10331         NamespaceEntry.Using.
10332         (namespace_name): Don't flatten to a string.
10333         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
10334         (NamespaceEntry.AliasEntry.Resolve): Lookup using
10335         ResolveAsTypeStep.
10336         (NamespaceEntry.UsingEntry): Likewise.
10337         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
10338         changes.
10339         (NamespaceEntry.LookupForUsing): Remove.
10340         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
10341         names.
10342         (NamespaceEntry.Lookup): Remove support for dotted names.
10343
10344 2005-02-01  Raja R Harinath  <rharinath@novell.com>
10345
10346         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
10347         split into two.
10348         (NamespaceEntry.ImplicitParent): Compute on demand.
10349         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
10350         parallels the current.
10351         (NamespaceEntry.LookupForUsing): Use it.
10352         (NamespaceEntry.Lookup): If the current namespace-entry is
10353         implicit, don't search aliases and using tables.
10354
10355 2005-02-01  Raja R Harinath  <rharinath@novell.com>
10356
10357         Fix #31984.
10358         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
10359         BaseCache here.
10360         (TypeContainer.BaseCache): Compute on demand.
10361         (TypeContainer.FindMembers): Define constants and types if they're
10362         not already created.
10363         (FieldMember.Define): Move resetting of ec.InUnsafe before error
10364         check.
10365         * const.cs (Constant.Define): Make idempotent.
10366
10367 2005-01-29  Miguel de Icaza  <miguel@novell.com>
10368
10369         * pending.cs: Produce better code (no nops produced by using Ldarg
10370         + value).
10371         
10372         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
10373         i - 1' it should be arg + 1.
10374
10375         Fixes bug #71819.
10376
10377 2005-01-28  Raja R Harinath  <rharinath@novell.com>
10378
10379         * attribute.cs (Attribute.CheckAttributeType): Make private
10380         non-virtual.
10381         (Attribute.ResolveType): Make virtual.
10382         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
10383         handling of RootContext.Tree.Types.
10384
10385 2005-01-27  Raja R Harinath  <rharinath@novell.com>
10386
10387         Update attribute-handling to use the SimpleName/MemberAccess
10388         mechanisms.
10389         * cs-parser.jay (attribute): Pass in an expression to the
10390         constructors of Attribute and GlobalAttribute.
10391         * attribute.cs (Attribute): Take an expression for the name.
10392         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
10393         passed in attribute name expression.
10394         (Attribute.CheckAttributeType): Use it.
10395         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
10396         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
10397         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
10398         argument to prevent error messages if the lookup fails.
10399
10400 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
10401
10402         * expression.cs (Indirection): Implemented IVariable interface
10403         to support indirection in AddressOf operator.
10404         (PointerArithmetic.Emit): Add optimalization for case where
10405         result can be precomputed.
10406
10407 2005-01-26  Martin Baulig  <martin@ximian.com>
10408
10409         * class.cs (TypeContainer.AttributeTargets): Return the correct
10410         AttributeTargets depending on our `Kind' instead of throwing an
10411         exception; fixes #71632.
10412
10413 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
10414
10415         Fix #71257
10416         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
10417         constant members.
10418
10419 2005-01-25  Raja R Harinath  <rharinath@novell.com>
10420
10421         Fix #71602.
10422         * expression.cs (MemberAccess.DoResolve): Don't complain with
10423         cs0572 when the LHS of a member access has identical name and type
10424         name.
10425
10426 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
10427
10428         Fix #71651, #71675
10429         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
10430         CreatePermission.
10431         Create custom PermissionSet only for PermissionSetAttribute.
10432
10433 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
10434
10435         Fix #71649
10436         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
10437         delegates in static class.
10438
10439 2005-01-24  Martin Baulig  <martin@ximian.com>
10440
10441         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
10442         merging an implicit block, just use its reachability.
10443
10444         * statement.cs (Block.Resolve): Make the unreachable code check
10445         work wrt. implicit blocks; see test-337 from #63842.
10446
10447 2005-01-21  Alp Toker  <alp@atoker.com>
10448  
10449         * cs-parser.jay: destructor_declaration's container is PartialContainer
10450         not Class when partial types are used, so use Kind prop instead of
10451         'is'.
10452         
10453 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
10454
10455         * cs-parser.jay: Improve error reporting when an interface
10456         declares new types.
10457
10458 2005-01-20  Dick Porter  <dick@ximian.com>
10459
10460         * support.cs: SeekableStreamReader fix from Sandor Dobos
10461         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
10462         chars are read.  Fixes bug 70369.
10463
10464 2005-01-20  Raja R Harinath  <rharinath@novell.com>
10465
10466         * cs-parser.jay (catch_clause): Simplify current_block handling
10467         somewhat.
10468
10469 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
10470
10471         * convert.cs (ImplicitStandardConversionExists): Synchronize the
10472         code with ImplicitStandardConversion to handle the implicit
10473         conversion of method groups into valid delegate invocations. 
10474
10475         The problem is that in parameter handling we were using this code
10476         path.  Fixes bug #64698
10477
10478 2005-01-19  Raja R Harinath  <rharinath@novell.com>
10479
10480         * cs-parser.jay: Fix several infelicities.
10481         - Avoid assigning to the parser value stack.  Code like 
10482           '$3 = null' is unclean.  Synthesize a value for the code block
10483           instead. 
10484         - Avoid using oob_stack for storing location information.  Use ...
10485         (_mark_): ... this.  New (empty) rule.  Saves the current location
10486         in $$.
10487         (foreach_statement): Avoid using oob_stack for current_block
10488         handling.  Use technique used in for_statement and
10489         using_statement.  Synthesize a value for the code block to store
10490         additional intermediate information.
10491
10492 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
10493
10494         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
10495         of a different type is only allowed to private fields of a
10496         containing type, not on fields of a base class.
10497
10498         See test-174.cs and error cs0122-9.cs
10499
10500 2005-01-13  Raja R Harinath  <rharinath@novell.com>
10501
10502         Fix test-335.cs (bug #58126).
10503         * cs-parser.jay (argument): Split out non-expression parts of the
10504         rule into 'non_simple_argument'.
10505         (invocation_expression): Support parenthesized invocations with
10506         multiple arguments, and with single non-simple arguments.
10507
10508 2005-01-13  Raja R Harinath  <rharinath@novell.com>
10509
10510         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
10511         places.
10512
10513 2005-01-12  Raja R Harinath  <rharinath@novell.com>
10514
10515         Fix cs0038-1.cs, cs1640-6.cs.
10516         * ecore.cs (Expression.Resolve): Remove special-case for
10517         SimpleName in error-handling.
10518         (Expression.almostMatchedMembers): Relax access permission to
10519         protected.
10520         (Expression.MemberLookupFailed): Handle duplicates in
10521         almostMatchedMembers list.
10522         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
10523         * expression.cs (New.DoResolve): Report CS1540 for more cases.
10524         * typemanager.cs (GetFullNameSignature): Use the MethodBase
10525         overload if the passed in MemberInfo is a MethodBase.
10526
10527 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
10528
10529         Fix #70749
10530         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
10531         for non-CAS & merge permission sets properly.
10532
10533 2005-01-11  Raja R Harinath  <rharinath@novell.com>
10534
10535         Improve standard-compliance of simple name and member access 
10536         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
10537         * ecore.cs (FullNamedExpression): New abstract base class 
10538         for Namespaces and TypeExpressions.
10539         (ResolveFlags.SimpleName): Remove.
10540         (SimpleName): Remove support for dotted names.
10541         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
10542         DeclSpace.FindType and DeclSpace.LookupType.
10543         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
10544         (Expression.ExprClassName): Make member function.
10545         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
10546         a namespace.  Remove creation of dotted "SimpleName"s.
10547         (MemberAccess.DoResolve): Likewise.
10548         * decl.cs (DeclSpace.Cache): Make private.
10549         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
10550         (DeclSpace.FindType): Update.
10551         (DeclSpace.LookupType): Move here from RootContext.  Return a 
10552         FullNamedExpression.
10553         * namespace.cs (Namespace): Derive from FullNamedExpression
10554         so that it can be part of expression resolution.
10555         (Namespace.Lookup): Return an FullNamedExpression.
10556         (NamespaceEntry.LookupAlias): Lookup aliases only in current
10557         namespace.
10558         * rootcontext.cs (NamespaceLookup): Remove.
10559         (LookupType): Move to DeclSpace.
10560         * attribute.cs (CheckAttributeType): Update.
10561         * doc.cs (FindDocumentedType): Remove allowAlias argument.
10562         (FindDocumentedTypeNonArray): Likewise.
10563
10564 2005-01-11  Raja R Harinath  <rharinath@novell.com>
10565
10566         Fix cs0509.cs, cs1632.cs.
10567         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
10568         is the same as IsInterface.
10569         (TypeContainer.GetClassBases): Likewise.
10570         * statement.cs (LabeledStatement.ig): New field.
10571         (LabeledStatement.LabelTarget): Save ILGenerator which created the
10572         label.
10573         (LabeledStatement.DoEmit): Check that the label was created with
10574         the same ILGenerator.
10575
10576 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
10577
10578         Fix #71058
10579         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
10580         accessors to its properties.
10581
10582         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
10583         from accessors to property.
10584         
10585 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
10586
10587         Fix #70722
10588         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
10589         only for overrides.
10590         
10591 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
10592
10593         * attribute.cs: Check for null and empty strings.  
10594
10595         I have lost another battle to Paolo.
10596
10597 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
10598
10599         Fix #70942
10600         * class.cs (PropertyMethod): Set Parent field in ctors.
10601         (SetMethod.InternalParameters): Add unsafe switch hack.
10602         Override MarkForDuplicationCheck where it is appropriate.
10603
10604         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
10605         It says whether container allows members with the same name.
10606         Base default is no.
10607         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
10608         Removed is_method parameter.
10609
10610 2005-01-06  Duncan Mak  <duncan@ximian.com>
10611
10612         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
10613         because the previous change led to incorrect reporting of CS1032
10614         ("Cannot define/undefine preprocessor symbols after first token in
10615         file"). Instead of using `tokens_seen' as the only flag that
10616         triggers CS1040, introduce `comments_seen'. This new flag is used
10617         to signify having seen comments on the current line, so it is
10618         unset after a newline.
10619
10620 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
10621
10622         * doc.cs : When searching for a type, find nested type too.
10623           This fixes bug #71040.
10624
10625 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
10626
10627         * doc.cs :
10628           - Warn missing member comment on those classes which also does not
10629             have doc comments. Fixed bug #71041.
10630           - Don't warn missing doc comment on default constructor.
10631             Fixed bug #71042.
10632
10633 2005-01-06  Duncan Mak  <duncan@ximian.com>
10634
10635         * cs-tokenizer.cs (xtoken): After handling traditional C-style
10636         comments, set `tokens_seen' to true. This allows us to detect
10637         misplaced preprocessor directives (i.e. not at the beginning of
10638         the a line, nor after whitespaces). In that case, report error
10639         CS1040. This fixes bug #56460.
10640
10641         * cs-parser.jay (interface_member_declaration): Add checks for
10642         IsExplicitImpl, and report CS0541 error if an interface member is
10643         defined as an explicit interface declaration.
10644
10645 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
10646
10647         Fix #70817
10648         * class.cs (PropertyMethod): Set Parent field in ctors.
10649         (SetMethod.InternalParameters): Add unsafe switch hack.
10650         
10651         * decl.cs (MemberCore.Parent): Cannot be readonly.
10652
10653 2005-01-06  Raja R Harinath  <rharinath@novell.com>
10654
10655         * decl.cs (DeclSpace.ResolveType): Remove.
10656         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
10657         Merge in code from ...
10658         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
10659         * class.cs, enum.cs: Update to changes.
10660
10661 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
10662
10663         * anonymous.cs: Ensure that we init the scope of our parent if it
10664         has not been initialized yet.
10665
10666 2004-12-30  Duncan Mak  <duncan@ximian.com>
10667
10668         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
10669         if field.FieldBuilder is null. Fixes #70758.
10670
10671         * convert.cs: Fixed some typos and updated some of the comments.
10672         (ImplicitStandardConversionExists):
10673         (TryImplicitIntConversion): If `target_type' is an interface and
10674         the type of `ic' implements this interface, return true or a new
10675         BoxedCast instead of null. This fixes #70468.
10676
10677 2004-12-29  Duncan Mak  <duncan@ximian.com>
10678
10679         * expression.cs (Argument.Emit): Check that Expr is
10680         IMemoryLocation before casting to it, and report CS1510 otherwise.
10681
10682         This fixes #70402.
10683
10684 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
10685
10686         * statement.cs (Block.ThisVariable): remove the recursion here, to
10687         make the --profile more sane.
10688
10689 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
10690
10691         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
10692         assembly, by JB Evain.
10693
10694 2004-12-17  Raja R Harinath  <rharinath@novell.com>
10695
10696         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
10697           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
10698         "parent" refers to enclosing type/class.  "base" refers to superclass.
10699
10700 2004-12-17  Raja R Harinath  <rharinath@novell.com>
10701
10702         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
10703         Ensure that we only have GlobalAttributes.
10704         * attribute.cs (Attribute.Emit): Make non-virtual.
10705         (GlobalAttribute.Emit): Remove.
10706         (Attribute.Resolve): Make virtual.
10707         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
10708         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
10709         the argument. Don't create one.
10710         (Attribute.GetObsoleteAttribute): Likewise.
10711         (Attribute.GetClsCompliantAttributeValue): Likewise.
10712         * class.cs, decl.cs: Update to changes.
10713
10714 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
10715
10716         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
10717         
10718         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
10719         
10720         * statement.cs (Foreach.Resolve): Add error 186 report.
10721
10722 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
10723
10724         * expression.cs (Conditional.DoResolve): Add warning 429.
10725         
10726         * statement.cs (If.Resolve): Add warning 665.
10727
10728 2004-12-16  Raja R Harinath  <rharinath@novell.com>
10729
10730         New invariant: RootContext.Tree.Types.NamespaceEntry == null
10731         except when in the parser, and in GlobalAttribute.
10732         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
10733         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
10734         RootContext.Tree.Types.NamespaceEntry once work is done.
10735         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
10736         and resets RootContext.Tree.Types.NamespaceEntry.
10737
10738 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
10739
10740         * cs-parser.jay: Don't create a block for every variable.
10741
10742 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
10743
10744         * location.cs: Provide extra information.
10745
10746         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
10747         variables from the captured environment, it is the ldarg_0.
10748
10749 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
10750
10751         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
10752         find a conclusion.
10753         
10754         * class.cs: Changed warning level for 169 to avoid developer
10755         displeasure from warning flooding. It will be changed back when they
10756         fix most of current BCL warnings.
10757         
10758         * RootContext.cs: Pushed default WarningLevel to 3.
10759         
10760         * statement.cs: Removed unused variable.
10761
10762 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
10763
10764         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
10765         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
10766         Add error 502 report.
10767         (StaticClass.DefineType): Add error 441 report.
10768         (Class.AllowedModifiersProp): New virtual property as temporary
10769         extension to AllowedModifiers.
10770         (Class.DefineType): Add error 418 report. Moved ModFlags check here
10771         to share implementation with StaticClass and don't call virtual
10772         methods from ctor.
10773         
10774         * driver.cs (MainDriver): Add error 1558 test.
10775
10776         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
10777         report. Moved error 36 test here.
10778
10779         * statement.cs (Throw.Resolve): Add error 724 report.
10780
10781         * typemanager.cs: Add out_attribute_type core type.
10782         
10783 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
10784
10785         * class.cs (TypeContainer.VerifyClsCompliance): Add error
10786         3018 report.
10787         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
10788
10789         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
10790         3017 report.
10791         
10792         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
10793
10794         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
10795         Add error 3023 report.
10796         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
10797
10798         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
10799         implementation.
10800
10801 2004-12-12  John Luke  <john.luke@gmail.com>
10802
10803         * driver.cs (AddArgs): take -- into account when
10804         adding arguments, fixes bug 65710 
10805
10806 2004-12-12  Martin Baulig  <martin@ximian.com>
10807
10808         * expression.cs (Unary.TryReduceNegative): Added support for
10809         SByteConstant and ByteConstant.
10810         (Unary.Reduce): Check error values from TryReduceNegative().
10811
10812 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
10813
10814         * attributes.cs (Attribute.Resolve): Avoid multiple error report
10815         and report exception as error 182.
10816
10817 2004-12-10  Raja R Harinath  <rharinath@novell.com>
10818
10819         * driver.cs (Main): Fix message when there are warnings.
10820
10821 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
10822
10823         * delegate.cs: Fixed my fix from yesterday, sorry about that.
10824
10825 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
10826
10827         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
10828         Reduced number of warnings.
10829         
10830         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
10831
10832 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
10833
10834         * driver.cs: Removed message.
10835
10836         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
10837
10838 2004-12-08    <vargaz@freemail.hu>
10839
10840         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
10841
10842 2004-12-08  Martin Baulig  <martin@ximian.com>
10843
10844         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
10845         instead of a CS3002 for properties and indexer.
10846
10847 2004-12-08  Martin Baulig  <martin@ximian.com>
10848
10849         * decl.cs (MemberName.ToString): Make this work again.
10850
10851 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
10852
10853         * attribute.cs (Resolve): Add error 591 detection.
10854
10855         * class.cs (FieldMember.Define): Add error 1547 detection.
10856         (Indexer.Define): Add error 620 detection.
10857         (Operator.Define): Add error 590 detection.
10858
10859         * ecore.cs: Missing argument for error 79.
10860
10861         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
10862         detection.
10863
10864 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
10865
10866         Fix #70106
10867         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
10868         only.
10869
10870 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
10871
10872         * cs-parser.jay : handle doc comments on implicit/explicit operators.
10873           Some operator comments were suppressed.
10874         * doc.cs : Implicit/explicit operator name in doc comments are like
10875           "op_Explicit(type)~returnType", so added suffix handling.
10876
10877 2004-12-07  Martin Baulig  <martin@ximian.com>
10878
10879         * decl.cs
10880         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
10881         (MemberCore.GetClsCompliantAttributeValue): Likewise.
10882         (DeclSpace.ec): New protected field; store the EmitContext here.
10883         (DeclSpace.EmitContext): New public property; moved here from
10884         `TypeContainer'.
10885         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
10886         EmitContext.
10887
10888         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
10889         (Enum.Emit): Don't create a new EmitContext.
10890
10891         * delegate.cs (Delegate.DefineType): Always create the
10892         EmitContext.
10893
10894         * iterators.cs (Iterators.DefineIterator): Create a new
10895         EmitContext and store it in `ec'.
10896
10897 2004-08-24  Martin Baulig  <martin@ximian.com>
10898
10899         * typemanager.cs
10900         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
10901         this for accessibility checks.
10902         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
10903         IsNestedFamilyAccessible.
10904         (TypeManager.IsSubclassOf): New method, do what the name actually
10905         says.   
10906
10907 2004-12-06  Raja R Harinath  <rharinath@novell.com>
10908
10909         Fix crash on cs0657-17.cs.
10910         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
10911         Use RootContext.Tree.Types, not 'new RootTypes ()'.
10912         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
10913         the case where the NamespaceEntry gets overwritten.
10914
10915 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
10916
10917         Fixed #69195, #56821
10918         * ecore.cs (ResolveBoolean): Tiny refactoring.
10919
10920         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
10921         of right expression resolving when left is false constant and
10922         operator is LogicalAnd OR true constant and operator is LogicalOr.
10923
10924         * statement.cs (ResolveUnreachable): Always reports warning.
10925
10926 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
10927
10928         * class.cs: Distinguish between 1721 and 1722 (just a little help
10929         for the programmer).
10930
10931 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
10932
10933         * delegate.cs: Only allow this on new versions of the language. 
10934
10935 2004-12-02  Duncan Mak  <duncan@ximian.com>
10936
10937         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
10938         Expression class.
10939         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
10940         here as a static method. Take an additional bool out parameter
10941         `must_do_cs1540_check' for signaling to InstanceResolve.
10942         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
10943         member field from PropertyExpr class and made it an argument of
10944         the method instead.
10945         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
10946         check for MarshalByRefObject, and report CS0122 instead of CS1540.
10947         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
10948         and `remove_accessor' as well as InstanceResolve: report CS0122
10949         where applicable.
10950
10951         Fixes #70129.
10952
10953 2004-12-03  Raja R Harinath  <rharinath@novell.com>
10954
10955         Fix test-327.cs, test-328.cs, and put in early infrastructure
10956         for eventually fixing #52697.
10957         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
10958         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
10959         from other methods.
10960         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
10961         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
10962         (VerifyUsing, error246): Update.
10963         * rootcontext.cs (RootContext.NamespaceLookup): Just use
10964         'NamespaceEntry.LookupNamespaceOrType'.
10965
10966 2004-12-03  Martin Baulig  <martin@ximian.com>
10967
10968         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
10969         method as our child, call AnonymousMethod.Compatible() on it.
10970
10971 2004-12-03  Raja R Harinath  <rharinath@novell.com>
10972
10973         Disable XML documentation support in 'basic' profile.
10974         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
10975         Redirect XmlElement to System.Object.
10976         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
10977         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
10978         * mcs.exe.sources: Add doc-bootstrap.cs.
10979         * doc-bootstrap.cs: New file.  Contains empty stub implementation
10980         of doc.cs.
10981
10982 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
10983
10984         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
10985           comments are allowed.
10986
10987 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
10988
10989         * delegate.cs: Add checks for subtypes in paramaters and return values
10990         in VerifyMethod () to add support for Covariance/Contravariance
10991         in delegates.
10992         
10993 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
10994
10995         * report.cs: Remove extra closing parenthesis.
10996
10997         * convert.cs (Error_CannotImplicitConversion): If the name of the
10998         types are the same, provide some extra information.
10999
11000         * class.cs (FieldBase): Use an unused bit field from the field to
11001         encode the `has_offset' property from the FieldMember.  This saves
11002         a couple of Ks on bootstrap compilation.
11003
11004         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
11005         method as our child, return the AnonymousMethod resolved
11006         expression.
11007
11008         * expression.cs (New.DoResolve): Allow return values from
11009         NewDelegate to also include AnonymousMethods.
11010
11011         Fixes #70150.
11012
11013 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
11014
11015         Fix bug #70102
11016         * attribute.cs (Resolve): Improved implementation of params
11017         attribute arguments.
11018
11019         * support.cs (ParameterData): Add HasParams to be faster.
11020
11021 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
11022
11023         all things are for /doc support:
11024
11025         * doc.cs: new file that supports XML documentation generation.
11026         * mcs.exe.sources: added doc.cs.
11027         * driver.cs:
11028           Handle /doc command line option.
11029           Report error 2006 instead of 5 for missing file name for /doc.
11030           Generate XML documentation when required, after type resolution.
11031         * cs-tokenizer.cs:
11032           Added support for picking up documentation (/// and /** ... */),
11033           including a new XmlCommentState enumeration.
11034         * cs-parser.jay:
11035           Added lines to fill Documentation element for field, constant,
11036           property, indexer, method, constructor, destructor, operator, event
11037           and class, struct, interface, delegate, enum.
11038           Added lines to warn incorrect comment.
11039         * rootcontext.cs :
11040           Added Documentation field (passed only when /doc was specified).
11041         * decl.cs:
11042           Added DocComment, DocCommentHeader, GenerateDocComment() and
11043           OnGenerateDocComment() and some supporting private members for
11044           /doc feature to MemberCore.
11045         * class.cs:
11046           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
11047         * delegate.cs:
11048           Added overriden DocCommentHeader.
11049         * enum.cs:
11050           Added overriden DocCommentHeader and GenerateDocComment().
11051
11052 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
11053
11054         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
11055         unwrapping the enumeration values, chain to
11056         DoConstantNumericPromotions again, so we can promote things to the
11057         fundamental types (takes care of enums that are bytes, sbytes).
11058
11059         Fixes bug #62054.
11060
11061 2004-12-01  Raja R Harinath  <rharinath@novell.com>
11062
11063         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
11064         Fix long-standing bug in type-lookup.  Use FindType instead of
11065         LookupType when ec.ResolvingTypeTree.
11066         (Attribute.ResolveType, Attribute.Resolve)
11067         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
11068         Update to changes.
11069         (Attributes.Search): Remove internal version.  Update.
11070         (Attributes.SearchMulti): Update.
11071         (Attributes.GetClsCompliantAttribute): Remove.
11072         (Attributes.GetIndexerNameAttribute): Remove.
11073         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
11074         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
11075         * class.cs (Indexer.Define): Likewise.
11076
11077 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
11078
11079         Fix bug #68790
11080         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
11081         MarshallByReference members access.
11082
11083         * expression.cs: Use CheckMarshallByRefAccess;
11084         Better error CS0197 message.
11085
11086         * report.cs: Print whole related error message.
11087
11088 2004-11-30  Raja R Harinath  <rharinath@novell.com>
11089
11090         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
11091         the current directory to help debugging.
11092
11093 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
11094
11095         * class (GetClassBases): Better error 60 report.
11096         (EventProperty): Disabled warning 67 detection.
11097
11098 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
11099
11100         Fix bug #60324
11101         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
11102
11103         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
11104         precise values.
11105
11106 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
11107
11108         Fix bug #49488
11109         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
11110
11111         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
11112
11113 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
11114
11115         * attribute.cs (Attribute.Resolve): Refine error reporting and
11116         report a cs0117 if the identifier does not exist, to distinguish
11117         from 0617 which is a miss-use of the actual identifier.
11118
11119         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
11120         between cs0070 and cs0079.
11121
11122         * class.cs (MemberBase.DoDefine): When reporting a wrong
11123         accessibility level, we use MethodCore to compare instead of
11124         Method (this was a regression in some refactoring effort).
11125
11126         So now we correctly report cs0056 again.
11127
11128         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
11129         testing the target_type (which was known to be object_type) and
11130         not the source type (which is anonymous_method).
11131
11132         Fixed reporting of error cs1660.
11133
11134         * expression.cs (UserCast.Source): Expose the underlying cast.
11135
11136         * statement.cs (Switch.SwitchGoverningType): Sort the list of
11137         allowed types to find a match to int32 first (most common).
11138
11139         In addition, it ignores any ImplicitUserConversions that did an
11140         internal implicit conversion (as the switch statement allows only
11141         one integral conversion to exist).
11142
11143         * class.cs (PartialContainer.Create): rename `name' to
11144         `member_name' for clarity.  Then replace the string calls with a
11145         call to MemberName.GetPartialName, as now using
11146         MemberName.ToString is an error (this is due to the side effects
11147         it had, that were fixed in the past).
11148
11149         This will restore the error reporting on a number of partial class
11150         errors that were missusing this (and getting an exception as a
11151         results, which is now just a plain textual warning, because
11152         yyparse debug output would crash otherwise).
11153
11154 2004-11-26  Raja R Harinath  <rharinath@novell.com>
11155
11156         * Makefile (PROGRAM_INSTALL_DIR): Remove.
11157
11158 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
11159
11160         * rootcontext.cs (LookupType): Make sure to cache lookups that
11161         don't give us a negative result. This saves about 5% of corlib
11162         compilation time.
11163
11164 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
11165
11166         * report.cs (AbstractMessage.Print): messages are sent to stderr
11167
11168         * class.cs (TypeContainer.GetClassBases): It is an error to have a
11169         non-interface in the list of interfaces (at this point, either
11170         parent was properly set, or a base class is being listed in the
11171         interfaces section).
11172
11173         This flags error 1722, and resolves the crash from bug 69259.
11174
11175 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
11176
11177         * statement.cs (Using.EmitExpressionFinally): make this work right
11178         for valuetypes. Fixes 69926.
11179
11180 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
11181
11182         * const.cs (Const.ChangeType): Cope with the "0 literal can be
11183         converted to an enum" here, before we try to change the underlying
11184         type.  This code exists, but it is a different code path than the
11185         one used while encoding constants.
11186
11187         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
11188         old bug: when converting from the null literal to a pointer,
11189         return an EmptyCast, not the NullLiteral.
11190
11191         This fixes #69921, the recent null_type changes probably made this
11192         bug more prominent.
11193
11194         (ImplicitReferenceConversionExists): In addition, resynchronized
11195         the code here, so it matches the same code in
11196         ImplicitReferenceConversionExists for the `from any class-type S
11197         to any interface-type T'.
11198         
11199
11200 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
11201
11202         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
11203
11204 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
11205
11206         * cs-parser.jay: Use verbosity accordingly. 
11207
11208 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
11209
11210         * expression.cs (Unary.ResolveOperator): Do not report warning;
11211         AddressOf reads from variable.
11212         
11213         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
11214
11215 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
11216
11217         Fix bug #69462
11218
11219         * attribute.cs (Attributable): Removed CheckTargets.
11220         (Attributes.Emit): Explicit attribute targets are tested here.
11221
11222         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
11223         not enabled for interfaces.
11224
11225         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
11226         (GetAssemblyName): Ouch next bug there.
11227
11228 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
11229
11230         * expression.cs: Error 275 added.
11231         
11232 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
11233
11234         Fix bug #69177 (Implemented decimal constant support)
11235
11236         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
11237         (BinaryFold): Add DecimalConstant.
11238
11239         * const.cs (Define): Decimal constant 
11240         (is not constant.
11241         (ChangeType): Add decimal type handling.
11242         (LookupConstantValue): Don't set value for decimal type but
11243         emit DecimalConstantAttribute. Needed for constant optimization.
11244
11245         * constant.cs (ToDecimal): New method.
11246         (ConvertToDecimal): New method.
11247         (IntConstant): Implemented ConvertToDecimal.
11248         (DecimalConstant.Emit): Emit optimized version for decimals in
11249         int range.
11250
11251         * expression.cs (ResolveOperator): Changed order of constant
11252         reduction to work correctly with native types which have
11253         overloaded operators.
11254         (ResolveMemberAccess): Extract constant value from attribute
11255         for decimal type.
11256
11257         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
11258
11259         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
11260         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
11261         (ChangeType): Decimal is special.
11262         (TypeToCoreType): Add decimal type.
11263
11264 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
11265
11266         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
11267         decimal types.
11268
11269 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
11270
11271         * class.cs (EventField.ApplyAttributeBuilder): Fix error
11272         test cs1667-5.cs.
11273
11274 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
11275
11276         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
11277
11278         * pending.cs (PendingImplementation): Grab only interfaces.
11279
11280 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
11281
11282         * statement.cs (ForeachHelperMethods): Add location member and
11283         error 202 detection.
11284
11285 2004-11-19  Raja R Harinath  <rharinath@novell.com>
11286
11287         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
11288         automatically handled by executable.make.
11289         (PROGRAM): Make profile-specific.
11290
11291 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
11292
11293         * expression.cs (DoResolveBase): Fixed wrong warning for out
11294         variables.
11295
11296 2004-11-18  Martin Baulig  <martin@ximian.com>
11297
11298         Merged latest changes into gmcs.  Please keep this comment in
11299         here, it makes it easier for me to see what changed in MCS since
11300         the last time I merged.
11301
11302 2004-11-17  Raja R Harinath  <rharinath@novell.com>
11303
11304         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
11305         (TypeHandle.GetMemberCache): New.
11306         (TypeHandle.TypeHandle): Update.
11307         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
11308         (TypeManager.LookupParentInterfacesCache):
11309         Rename from LookupInterfaceCache.  Optimize slightly.
11310         (TypeManager.MemberLookup_FindMembers): Update.
11311         * decl.cs (MemberCache.MemberCache): Set Container to null in the
11312         multi-type variant.
11313         (AddCacheContents): Rename from AddHashtable.
11314         * class.cs (TypeContainer.parent_container): Remove.
11315         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
11316         (TypeContainer.DoDefineMembers): Don't initialize it.
11317         Update to name changes.
11318         
11319 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
11320
11321         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
11322         that factors the code to check access modifiers on override.  
11323
11324         (PropertyBase): Use the code here.
11325
11326         Patch from Lluis S'anchez, fixes bug #69361.
11327
11328 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
11329
11330         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
11331         routine that is used to report the use of a captured variable
11332         whose address has been taken.
11333
11334         There are two checks: one when variables are being captured and
11335         the other check is when the address of a variable is taken. 
11336         
11337         (because an anonymous methods might be resolved before *or* after
11338         the address has been taken) and 
11339
11340         * expression.cs (Conditional.DoResolve): Remove the special
11341         casing that Martin added to trueExpr and falseExpr being both
11342         NullLiteral.  We get the right behavior now just by introducing
11343         the null_type into the compiler. 
11344
11345         * convert.cs (ExplicitConversion): Change the code to use
11346         null_type instead of testing `expr is NullLiteral'.
11347         (ImplicitConversionStandard): use null_type too.
11348         (ImplicitReferenceConversionExists): use null_type too.
11349         (ImplicitReferenceConversion): use null_type too.
11350
11351         * literal.cs: The type of `NullLiteral' is now null_type instead
11352         of object_type. 
11353         (Resolve): Set the type here.
11354
11355         * typemanager.cs: Introduce null_type.
11356
11357 2004-11-17  Martin Baulig  <martin@ximian.com>
11358
11359         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
11360         direction, like FindMembers() does.  Fixes #69546, testcase is in
11361         test-315.cs.    
11362
11363 2004-11-16  Martin Baulig  <martin@ximian.com>
11364
11365         This is based on a patch from Marek Safar, see bug #69082.
11366         Fixes bugs #63705 and #67130.
11367
11368         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
11369         method; create a MemberCache for an interface type and cache the
11370         result.
11371
11372         * decl.cs (IMemberContainer.ParentContainer): Removed.
11373         (IMemberContainer.ParentCache): New property.
11374         (MemberCache.SetupCacheForInterface): Removed.
11375         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
11376         to create a cache for an interface's "parent".
11377
11378         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
11379         interfaces too.
11380
11381 2004-11-16  Martin Baulig  <martin@ximian.com>
11382
11383         Merged back from gmcs; these changes already went into gmcs a
11384         couple of weeks ago.
11385
11386         * typemanager.cs
11387         (TypeManager.AddUserType): Removed the `ifaces' argument.
11388         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
11389         `TypeExpr []'.
11390         (TypeManager.AddUserInterface): Removed.
11391         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
11392         `TypeExpr []'.
11393         (TypeManager.GetInterfaces): Likewise.
11394         (TypeManager.GetExplicitInterfaces): Likewise.
11395
11396         * ecore.cs (TypeExpr.GetInterfaces): Removed.
11397
11398         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
11399         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
11400
11401 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
11402
11403         * statement.cs: Avoid adding bools to a hashtable.
11404
11405 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
11406
11407         * expression.cs (Invocation.OverloadResolve): Flag error if we are
11408         calling an unsafe method from a safe location.
11409
11410 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
11411
11412         Fix #69167
11413         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
11414
11415 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
11416
11417         * namespace.cs (VerifyUsing): use GetPartialName instead of
11418         ToString. 
11419
11420 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
11421
11422         * statement.cs (Return.Resolve): Fix regression in typo: if
11423         `in_exc', we have to request a NeedReturnLabel, this was a typo
11424         introduced in the anonymous method check-in.  Fixes #69131.
11425
11426         * Indexers were using the ShortName when defining themselves,
11427         causing a regression in the compiler bootstrap when applying the
11428         patch from 2004-11-02 (first part), now they use their full name
11429         and the bug is gone.
11430
11431 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
11432
11433         * driver.cs: Strip the path from the names of embedded resources. Fixes
11434         #68519.
11435
11436 2004-11-04  Raja R Harinath  <rharinath@novell.com>
11437
11438         Fix error message regression: cs0104-2.cs.
11439         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
11440         (AliasEntry.Resolve): Update.
11441         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
11442         'silent' flag.
11443         (RootContext.LookupType): Update.
11444
11445 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
11446
11447         * cs-parser.jay: Add support for handling accessor modifiers
11448         * class: Add support port accessor modifiers and error checking,
11449         define PropertyMethod.Define as virtual (not abstract anymore)
11450         * ecore.cs: Add checking for proeprties access with access modifiers
11451         * iterators.cs: Modify Accessor constructor call based in the modified
11452         constructor
11453 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
11454
11455         * expression.cs (StringConcat): Handle being called twice,
11456         as when we have a concat in a field init with more than two
11457         ctors in the class
11458
11459 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
11460
11461         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
11462         special case explicit implementations, we should always produce
11463         the .property or .event declaration.
11464         
11465         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
11466         since it will not return correct data if people use this
11467         unresolved in the presence of using statements (see test-313).
11468
11469         * class.cs (MethodData.Define): If we are an explicit interface
11470         implementation, set the method name to the full name of the
11471         interface plus the name of the method.  
11472
11473         Notice that using the method.MethodName.GetFullName() does not
11474         work, as it will only contain the name as declared on the source
11475         file (it can be a shorthand in the presence of using statements)
11476         and not the fully qualifed type name, for example:
11477
11478         using System;
11479
11480         class D : ICloneable {
11481                 object ICloneable.Clone ()  {
11482                 }
11483         }
11484
11485         Would produce a method called `ICloneable.Clone' instead of
11486         `System.ICloneable.Clone'.
11487
11488         * namespace.cs (Alias.Resolve): Use GetPartialName.
11489         
11490 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
11491
11492         * cs-parser.jay: Add error 1055 report.
11493
11494 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
11495
11496         * assign.cs (Assign.DoResolve): Only do the transform of
11497         assignment into a New if the types are compatible, if not, fall
11498         through and let the implicit code deal with the errors and with
11499         the necessary conversions. 
11500
11501 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
11502
11503         * cs-parser.jay: Add error 1031 report.
11504
11505         * cs-tokenizer.cs: Add location for error 1038.
11506
11507 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
11508
11509         * cs-parser.jay: Add error 1016 report.
11510
11511 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
11512
11513         * cs-parser.jay: Add errors 1575,1611 report.
11514
11515 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
11516
11517         * cs-parser.jay: Add error 1001 report.
11518
11519 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
11520
11521         Fix #68850
11522         * attribute.cs (GetMarshal): Add method argument for
11523         caller identification.
11524
11525         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
11526         agument for GetMarshal and RuntimeMissingSupport.
11527
11528 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
11529
11530         * attribute.cs (ExtractSecurityPermissionSet): Removed
11531         TypeManager.code_access_permission_type.
11532
11533         * typemanager.cs: Removed TypeManager.code_access_permission_type.
11534
11535 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
11536
11537         * expression.cs (LocalVariableReference.DoResolveLValue): Check
11538         for obsolete use of a variable here.   Fixes regression on errors
11539         cs0619-25 and cs0619-26.
11540
11541 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
11542
11543         Fix #62358, implemented security attribute encoding.
11544
11545         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
11546         Tests permitted SecurityAction for assembly or other types.
11547         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
11548         data from SecurityPermissionAttribute to PermisionSet class.
11549
11550         * class.cs (ApplyAttributeBuilder): Added special handling
11551         for System.Security.Permissions.SecurityAttribute based types.
11552
11553         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
11554         special handling for System.Security.Permissions.SecurityAttribute
11555         based types.
11556
11557         * enum.cs (ApplyAttributeBuilder): Added special handling
11558         for System.Security.Permissions.SecurityAttribute based types.
11559
11560         * parameter.cs (ApplyAttributeBuilder): Added special handling
11561         for System.Security.Permissions.SecurityAttribute based types.
11562
11563         * rootcontext.cs: Next 2 core types.
11564
11565         * typemanager.cs (TypeManager.security_permission_attr_type):
11566         Built in type for the SecurityPermission Attribute.
11567         (code_access_permission_type): Build in type.
11568
11569 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
11570
11571         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
11572         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
11573         all of this information into
11574         EmitContext.EmitCapturedVariableInstance.
11575         
11576         * codegen.cs (EmitCapturedVariableInstance): move here the
11577         funcionality of emitting an ldarg.0 in the presence of a
11578         remapping.   This centralizes the instance emit code.
11579
11580         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
11581         then emit a load of this: it means that we have reached the
11582         topmost ScopeInfo: the one that contains the pointer to the
11583         instance of the class hosting the anonymous method.
11584
11585         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
11586         captures to the topmost CaptureContext.
11587
11588 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
11589
11590         * expression.cs (LocalVariableReference): Move the knowledge about
11591         the iterators into codegen's EmitCapturedVariableInstance.
11592
11593 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
11594
11595         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
11596         all code paths return a value from an anonymous method (it is the
11597         same as the 161 error, but for anonymous methods).
11598
11599 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
11600
11601         The introduction of anonymous methods in the compiler changed
11602         various ways of doing things in the compiler.  The most
11603         significant one is the hard split between the resolution phase
11604         and the emission phases of the compiler.
11605
11606         For instance, routines that referenced local variables no
11607         longer can safely create temporary variables during the
11608         resolution phase: they must do so from the emission phase,
11609         since the variable might have been "captured", hence access to
11610         it can not be done with the local-variable operations from the runtime.
11611         
11612         * statement.cs 
11613
11614         (Block.Flags): New flag `IsTopLevel' to indicate that this block
11615         is a toplevel block.
11616
11617         (ToplevelBlock): A new kind of Block, these are the blocks that
11618         are created by the parser for all toplevel method bodies.  These
11619         include methods, accessors and anonymous methods.
11620
11621         These contain some extra information not found in regular blocks:
11622         A pointer to an optional CaptureContext (for tracking captured
11623         local variables and parameters).  A pointer to the parent
11624         ToplevelBlock.
11625         
11626         (Return.Resolve): Catch missmatches when returning a value from an
11627         anonymous method (error 1662).
11628         Invoke NeedReturnLabel from the Resolve phase instead of the emit
11629         phase.
11630
11631         (Break.Resolve): ditto.
11632
11633         (SwitchLabel): instead of defining the labels during the
11634         resolution phase, we now turned the public ILLabel and ILLabelCode
11635         labels into methods called GetILLabelCode() and GetILLabel() that
11636         only define the label during the Emit phase.
11637
11638         (GotoCase): Track the SwitchLabel instead of the computed label
11639         (its contained therein).  Emit the code by using
11640         SwitchLabel.GetILLabelCode ().
11641
11642         (LocalInfo.Flags.Captured): A new flag has been introduce to track
11643         whether the Local has been captured or not.
11644
11645         (LocalInfo.IsCaptured): New property, used to tell whether the
11646         local has been captured.
11647         
11648         * anonymous.cs: Vastly updated to contain the anonymous method
11649         support.
11650
11651         The main classes here are: CaptureContext which tracks any
11652         captured information for a toplevel block and ScopeInfo used to
11653         track the activation frames for various local variables.   
11654
11655         Each toplevel block has an optional capture context associated
11656         with it.  When a method contains an anonymous method both the
11657         toplevel method and the anonymous method will create a capture
11658         context.   When variables or parameters are captured, they are
11659         recorded on the CaptureContext that owns them, for example:
11660
11661         void Demo () {
11662              int a;
11663              MyDelegate d = delegate {
11664                  a = 1;
11665              }
11666         }
11667
11668         Here `a' will be recorded as captured on the toplevel
11669         CapturedContext, the inner captured context will not have anything
11670         (it will only have data if local variables or parameters from it
11671         are captured in a nested anonymous method.
11672
11673         The ScopeInfo is used to track the activation frames for local
11674         variables, for example:
11675
11676         for (int i = 0; i < 10; i++)
11677                 for (int j = 0; j < 10; j++){
11678                    MyDelegate d = delegate {
11679                         call (i, j);
11680                    }
11681                 }
11682
11683         At runtime this captures a single captured variable `i', but it
11684         captures 10 different versions of the variable `j'.  The variable
11685         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
11686         recorded on a child.  
11687
11688         The toplevel ScopeInfo will also track information like the `this'
11689         pointer if instance variables were referenced (this is necessary
11690         as the anonymous method lives inside a nested class in the host
11691         type of the method). 
11692
11693         (AnonymousMethod): Expanded to track the Toplevel, implement
11694         `AnonymousMethod.Compatible' to tell whether an anonymous method
11695         can be converted to a target delegate type. 
11696
11697         The routine now also produces the anonymous method content
11698
11699         (AnonymousDelegate): A helper class that derives from
11700         DelegateCreation, this is used to generate the code necessary to
11701         produce the delegate for the anonymous method that was created. 
11702
11703         * assign.cs: API adjustments for new changes in
11704         Convert.ImplicitStandardConversionExists.
11705
11706         * class.cs: Adjustments to cope with the fact that now toplevel
11707         blocks are of type `ToplevelBlock'. 
11708
11709         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
11710         insteda of standard blocks.
11711
11712         Flag errors if params arguments are passed to anonymous methods.
11713
11714         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
11715         `CurrentAnonymousMethod' which points to the current Anonymous
11716         Method.  The variable points to the AnonymousMethod class that
11717         holds the code being compiled.  It is set in the new EmitContext
11718         created for the anonymous method.
11719
11720         (EmitContext.Phase): Introduce a variable and an enumeration to
11721         assist in enforcing some rules about when and where we are allowed
11722         to invoke certain methods (EmitContext.NeedsReturnLabel is the
11723         only one that enfonces this right now).
11724
11725         (EmitContext.HaveCaptureInfo): new helper method that returns
11726         whether we have a CapturedContext initialized.
11727
11728         (EmitContext.CaptureVariable): New method used to register that a
11729         LocalInfo must be flagged for capturing. 
11730
11731         (EmitContext.CapturedParameter): New method used to register that a
11732         parameters must be flagged for capturing. 
11733         
11734         (EmitContext.CapturedField): New method used to register that a
11735         field must be flagged for capturing. 
11736
11737         (EmitContext.HaveCapturedVariables,
11738         EmitContext.HaveCapturedFields): Return whether there are captured
11739         variables or fields. 
11740
11741         (EmitContext.EmitMethodHostInstance): This is used to emit the
11742         instance for the anonymous method.  The instance might be null
11743         (static methods), this (for anonymous methods that capture nothing
11744         and happen to live side-by-side with the current method body) or a
11745         more complicated expression if the method has a CaptureContext.
11746
11747         (EmitContext.EmitTopBlock): Routine that drives the emission of
11748         code: it will first resolve the top block, then emit any metadata
11749         and then emit the code.  The split is done so that we can extract
11750         any anonymous methods and flag any captured variables/parameters.
11751         
11752         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
11753         during this phase, the ILGenerator should not be used as labels
11754         and local variables declared here might not be accessible to any
11755         code that is part of an anonymous method.  
11756
11757         Exceptions to this include the temporary variables that are
11758         created by some statements internally for holding temporary
11759         variables. 
11760         
11761         (EmitContext.EmitMeta): New routine, in charge of emitting all the
11762         metadata for a cb
11763
11764         (EmitContext.TemporaryReturn): This method is typically called
11765         from the Emit phase, and its the only place where we allow the
11766         ReturnLabel to be defined other than the EmitMeta.  The reason is
11767         that otherwise we would have to duplicate a lot of logic in the
11768         Resolve phases of various methods that today is on the Emit
11769         phase. 
11770
11771         (EmitContext.NeedReturnLabel): This no longer creates the label,
11772         as the ILGenerator is not valid during the resolve phase.
11773
11774         (EmitContext.EmitThis): Extended the knowledge in this class to
11775         work in anonymous methods in addition to iterators. 
11776
11777         (EmitContext.EmitCapturedVariableInstance): This emits whatever
11778         code is necessary on the stack to access the instance to a local
11779         variable (the variable will be accessed as a field).
11780
11781         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
11782         EmitContext.EmitAddressOfParameter): Routines to support
11783         parameters (not completed at this point). 
11784         
11785         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
11786         will also remove the parameters.
11787
11788         * convert.cs (Convert): Define a `ConstantEC' which points to a
11789         null.  This is just to prefity some code that uses
11790         ImplicitStandardConversion code and do not have an EmitContext
11791         handy.
11792
11793         The idea is to flag explicitly that at that point in time, it is
11794         known that the conversion will not trigger the delegate checking
11795         code in implicit conversions (which requires a valid
11796         EmitContext). 
11797
11798         Everywhere: pass new EmitContext parameter since
11799         ImplicitStandardConversionExists now requires it to check for
11800         anonymous method conversions. 
11801
11802         (Convert.ImplicitStandardConversionExists): If the type of an
11803         expression is the anonymous_method_type, and the type is a
11804         delegate, we invoke the AnonymousMethod.Compatible method to check
11805         whether an implicit conversion is possible. 
11806
11807         (Convert.ImplicitConversionStandard): Only do implicit method
11808         group conversions if the language level is not ISO_1.
11809
11810         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
11811         MethodInfo for the Invoke method.  used by Delegate and
11812         AnonymousDelegate.
11813
11814         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
11815         method conversions if the target type is a delegate.
11816
11817         Removed extra debugging nops.
11818
11819         (LocalVariableReference): Turn the `local_info' into a public
11820         field. 
11821
11822         Add `prepared' field, the same hack used for FieldExprs to cope
11823         with composed assignments, as Local variables do not necessarily
11824         operate purely on the stack as they used to: they can be captured
11825         fields. 
11826
11827         Add `temp' for a temporary result, like fields.
11828
11829         Refactor DoResolve and DoResolveLValue into DoResolveBase.
11830
11831         It now copes with Local variables that are captured and emits the
11832         proper instance variable to load it from a field in the captured
11833         case. 
11834
11835         (ParameterReference.DoResolveBase): During the resolve phase,
11836         capture parameters if we are in an anonymous method.
11837
11838         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
11839         anonymous method, use the EmitContext helper routines to emit the
11840         parameter reference.
11841
11842         * iterators.cs: Set RemapToProxy to true/false during the
11843         EmitDispose class.
11844
11845         * parameters.cs (GetParameterByName): New helper method. 
11846
11847         * typemanager.cs (anonymous_method_type) a new type that
11848         represents an anonyous method.  This is always an internal type,
11849         used as a fencepost to test against the anonymous-methodness of an
11850         expression. 
11851         
11852 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
11853
11854         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
11855         561 report.
11856         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
11857
11858 2004-10-18  Martin Baulig  <martin@ximian.com>
11859
11860         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
11861         `Type' directly, but call ResolveType() on it.
11862         (Catch.Resolve): Likewise.
11863         (Foreach.Resolve): Likewise.
11864
11865 2004-10-18  Martin Baulig  <martin@ximian.com>
11866
11867         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
11868         `Type' directly, but call ResolveType() on it.
11869         (Probe.DoResolve): Likewise.
11870         (ArrayCreation.LookupType): Likewise.
11871         (TypeOf.DoResolve): Likewise.
11872         (SizeOf.DoResolve): Likewise.
11873
11874 2004-10-18  Martin Baulig  <martin@ximian.com>
11875
11876         * expression.cs (Invocation.BetterFunction): Put back
11877         TypeManager.TypeToCoreType().
11878
11879 2004-10-18  Raja R Harinath  <rharinath@novell.com>
11880
11881         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
11882         the ResolveType.
11883
11884 2004-10-18  Martin Baulig  <martin@ximian.com>
11885
11886         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
11887         `Type' directly, but call ResolveType() on it.
11888
11889 2004-10-18  Martin Baulig  <martin@ximian.com>
11890
11891         * class.cs (FieldMember.Define): Don't access the TypeExpr's
11892         `Type' directly, but call ResolveType() on it.
11893         (MemberBase.DoDefine): Likewise.
11894
11895         * expression.cs (New.DoResolve): Don't access the TypeExpr's
11896         `Type' directly, but call ResolveType() on it.
11897         (ComposedCast.DoResolveAsTypeStep): Likewise.
11898
11899         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
11900         `Type' directly, but call ResolveType() on it.
11901
11902 2004-10-17  John Luke  <john.luke@gmail.com>
11903
11904         * class.cs (Operator.GetSignatureForError): use CSharpName
11905
11906         * parameter.cs (Parameter.GetSignatureForError): Returns
11907         correct name even if was not defined.
11908
11909 2004-10-13  Raja R Harinath  <rharinath@novell.com>
11910
11911         Fix #65816.
11912         * class.cs (TypeContainer.EmitContext): New property.
11913         (DefineNestedTypes): Create an emitcontext for each part.
11914         (MethodCore.DoDefineParameters): Use container's emitcontext.
11915         Pass type array to InternalParameters.
11916         (MemberBase.DoDefine): Use container's emitcontext.
11917         (FieldMember.Define): Likewise.
11918         (Event.Define): Likewise.
11919         (SetMethod.GetParameterInfo): Change argument to EmitContext.
11920         Pass type array to InternalParameters.
11921         (SetIndexerMethod.GetParameterInfo): Likewise.
11922         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
11923         * delegate.cs (Define): Pass emitcontext to
11924         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
11925         array to InternalParameters.
11926         * expression.cs (ParameterReference.DoResolveBase): Pass
11927         emitcontext to GetParameterInfo.
11928         (ComposedCast.DoResolveAsTypeStep): Remove check on
11929         ec.ResolvingTypeTree.
11930         * parameter.cs (Parameter.Resolve): Change argument to
11931         EmitContext.  Use ResolveAsTypeTerminal.
11932         (Parameter.GetSignature): Change argument to EmitContext.
11933         (Parameters.ComputeSignature): Likewise.
11934         (Parameters.ComputeParameterTypes): Likewise.
11935         (Parameters.GetParameterInfo): Likewise.
11936         (Parameters.ComputeAndDefineParameterTypes): Likewise.
11937         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
11938         * support.cs (InternalParameters..ctor): Remove variant that takes
11939         a DeclSpace.
11940         * typemanager.cs (system_intptr_expr): New.
11941         (InitExpressionTypes): Initialize it.
11942
11943 2004-10-12  Chris Toshok  <toshok@ximian.com>
11944
11945         * cs-parser.jay: fix location for try_statement and catch_clause.
11946
11947 2004-10-11  Martin Baulig  <martin@ximian.com>
11948
11949         * report.cs: Don't make --fatal abort on warnings, we have
11950         -warnaserror for that.
11951
11952 2004-10-07  Raja R Harinath  <rharinath@novell.com>
11953
11954         More DeclSpace.ResolveType avoidance.
11955         * decl.cs (MemberCore.InUnsafe): New property.
11956         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
11957         with newly created EmitContext.
11958         (FieldMember.Define): Likewise.
11959         * delegate.cs (Delegate.Define): Likewise.
11960         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
11961         only if normal name-lookup fails.
11962         (TypeExpr.DoResolve): Enable error-checking.
11963         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
11964         (SizeOf.DoResolve): Likewise.
11965         (ComposedCast.DoResolveAsTypeStep): Likewise.
11966         (StackAlloc.DoResolve): Likewise.
11967         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
11968         (Block.Unsafe): New property.
11969         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
11970         (Unsafe): Set 'unsafe' flag of contained block.
11971         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
11972         (Fixed.Resolve): Likewise.
11973         (Catch.Resolve): Likewise.
11974         (Using.ResolveLocalVariableDecls): Likewise.
11975         (Foreach.Resolve): Likewise.
11976
11977 2004-10-05  John Luke <john.luke@gmail.com>
11978
11979         * cs-parser.jay: add location to error CS0175
11980
11981 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
11982
11983         * ecore.cs (Expression.Constantity): Add support for turning null
11984         into a constant.
11985
11986         * const.cs (Const.Define): Allow constants to be reference types
11987         as long as the value is Null.
11988
11989 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
11990
11991         * namespace.cs (NamespaceEntry.Using): No matter which warning
11992         level is set, check if this namespace name has already been added.
11993
11994 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
11995
11996         * expression.cs: reftype [!=]= null should always use br[true,false].
11997         # 67410
11998
11999 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
12000
12001         Fix #67108
12002         * attribute.cs: Enum conversion moved to 
12003         GetAttributeArgumentExpression to be applied to the all
12004         expressions.
12005
12006 2004-10-01  Raja R Harinath  <rharinath@novell.com>
12007
12008         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
12009         * class.c (TypeContainer.DefineType): Flag error if
12010         base types aren't accessible due to access permissions.
12011         * decl.cs (DeclSpace.ResolveType): Move logic to
12012         Expression.ResolveAsTypeTerminal.
12013         (DeclSpace.ResolveTypeExpr): Thin layer over
12014         Expression.ResolveAsTypeTerminal.
12015         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
12016         Refactor code into NestedAccess.  Use it.
12017         (DeclSpace.NestedAccess): New.
12018         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
12019         argument to silence errors.  Check access permissions.
12020         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
12021         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
12022         (Cast.DoResolve): Likewise.
12023         (New.DoResolve): Likewise.
12024         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
12025         (TypeOf.DoResolve): Likewise.
12026
12027         * expression.cs (Invocation.BetterConversion): Return the Type of
12028         the better conversion.  Implement section 14.4.2.3 more faithfully.
12029         (Invocation.BetterFunction): Make boolean.  Make correspondence to
12030         section 14.4.2.2 explicit.
12031         (Invocation.OverloadResolve): Update.
12032         (Invocation): Remove is_base field.
12033         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
12034         (Invocation.Emit): Likewise.
12035
12036 2004-09-27  Raja R Harinath  <rharinath@novell.com>
12037
12038         * README: Update to changes.
12039
12040 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
12041
12042         * cs-parser.jay: Reverted 642 warning fix.
12043
12044 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
12045
12046         Fix bug #66615
12047         * decl.cs (FindMemberWithSameName): Indexer can have more than
12048         1 argument.
12049
12050 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
12051
12052         * expression.cs (LocalVariableReference.DoResolveLValue):
12053         Do not report warning 219 for out values.
12054         (EmptyExpression.Null): New member to avoid extra allocations.
12055
12056 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
12057
12058         * cs-parser.jay: Fix wrong warning 642 report.
12059
12060         * cs-tokenizer.cs (CheckNextToken): New helper;
12061         Inspect next character if is same as expected.
12062
12063 2004-09-23  Martin Baulig  <martin@ximian.com>
12064
12065         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
12066         (Convert.ImplicitReferenceConversionExists): Likewise.
12067
12068 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
12069
12070         * class.cs (Operator.Define): Add error 448 and 559 report.
12071
12072 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
12073
12074         * class.cs (MemberBase.IsTypePermitted): New protected
12075         method for checking error CS0610.
12076
12077 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
12078
12079         * class.cs (TypeContainer.HasExplicitLayout): New property
12080         Returns whether container has StructLayout attribute set Explicit.
12081         (FieldMember): New abstract class for consts and fields.
12082         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
12083         (Field): Reuse FieldMember.
12084
12085         * const.cs (Const): Reuse FieldMember.
12086
12087         * rootcontext.cs: EmitConstants call moved to class.
12088
12089 2004-09-22  Martin Baulig  <martin@ximian.com>
12090
12091         Thanks to Peter Sestoft for this bug report.
12092
12093         * expression.cs (Conditional): If both the `trueExpr' and the
12094         `falseExpr' is a NullLiteral, return a NullLiteral.
12095
12096 2004-09-22  Martin Baulig  <martin@ximian.com>
12097
12098         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
12099         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
12100         for the "get_Current" call.
12101
12102 2004-09-22  Martin Baulig  <martin@ximian.com>
12103
12104         Marek and me just fixed one of our oldest bugs: #28562 :-)
12105
12106         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
12107
12108         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
12109         we're an EnumConstant, just return that.
12110         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
12111         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
12112         to get the value which'll actually be written into the attribute.
12113         However, we have to use GetValue() to access the attribute's value
12114         in the compiler.        
12115
12116 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
12117
12118         * constant.cs (Constant.IsNegative): New abstract property
12119         IsNegative.
12120
12121         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
12122         (StackAlloc.DoResolve): Reused IsNegative.
12123
12124 2004-09-21  Martin Baulig  <martin@ximian.com>
12125
12126         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
12127         if we're used in an iterator, we may be called from different
12128         methods.
12129
12130         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
12131         we actually have an exception block.
12132
12133 2004-09-20  John Luke <jluke@cfl.rr.com>
12134
12135         * class.cs, cs-parser.jay: Improve the error report for 1520:
12136         report the actual line where the error happens, not where the
12137         class was declared.
12138
12139         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
12140         Pass location information that was available elsewhere.
12141
12142 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
12143
12144         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
12145         runtime to delay sign assemblies.
12146
12147 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
12148
12149         * cs-parser.jay: Do not report the stack trace, this is barely
12150         used nowadays.
12151
12152 2004-08-22  John Luke  <john.luke@gmail.com>
12153  
12154         * driver.cs : check that a resource id is not already used
12155         before adding it, report CS1508 if it is, bug #63637
12156
12157 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
12158
12159         * ecore.cs: Removed dead code.
12160
12161 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
12162
12163         * class.cs: Do not report warning CS0067 on the interfaces.
12164
12165 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
12166
12167         * cs-parser.jay: Add error 504 report.
12168
12169 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
12170
12171         * rootcontext.cs: WarningLevel is 4 by default now.
12172
12173         * statement.cs (Fixed.Resolve): Do not null
12174         VariableInfo.
12175
12176 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
12177
12178         Fixed bug #55780
12179         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
12180         deep search when property is not virtual.
12181         (PropertyExpr.ResolveAccessors): Make one call for both
12182         accessors.
12183
12184 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
12185
12186         Fixed bug #65766
12187         * statement.cs: Error 152 report constains also location.
12188
12189 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
12190
12191         Fixed bug #65766
12192         * const.cs: Explicitly set constant as static.
12193
12194 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
12195
12196         Fixed bug #64226
12197         * cs-parser.jay: Add error 1017 report.
12198
12199 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
12200
12201         Fixed bug #59980, #64224
12202         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
12203
12204         * typemanager.cs (IsSpecialMethod): Simplified
12205
12206 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
12207
12208         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
12209         condition with better params.
12210
12211 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
12212
12213         Fixed bug #65238
12214         * attribute.cs (Resolve): Property has to have both
12215         accessors.
12216
12217 2004-09-14  Martin Baulig  <martin@ximian.com>
12218
12219         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
12220
12221 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
12222
12223         Fixed bug #61902
12224         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
12225         called and is obsolete then this member suppress message
12226         when call is inside next [Obsolete] method or type.
12227
12228         * expression.cs: Use TestObsoleteMethodUsage member.
12229
12230 2004-09-14  Martin Baulig  <martin@ximian.com>
12231
12232         * cs-parser.jay: Sync a bit with the GMCS version.
12233
12234 2004-09-14  Martin Baulig  <martin@ximian.com>
12235
12236         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
12237         (CSharpParser.yacc_verbose_flag): New public field.
12238
12239         * genericparser.cs: Removed.
12240
12241 2004-09-14  Raja R Harinath  <rharinath@novell.com>
12242
12243         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
12244
12245 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
12246
12247         * class.cs (MethodCore.CheckBase): Fix bug #65757.
12248
12249 2004-09-10  Martin Baulig  <martin@ximian.com>
12250
12251         Backported my MemberName changes from GMCS into MCS.
12252
12253         - we are now using a special `MemberName' class instead of using
12254         strings; in GMCS, the `MemberName' also contains the type
12255         arguments.
12256
12257         - changed the grammar rules a bit:
12258           * the old `member_name' is now a `namespace_or_type_name':
12259             The rule is that we use `namespace_or_type_name' everywhere
12260             where we expect either a "member name" (GetEnumerator) or a
12261             "member name" with an explicit interface name
12262             (IEnumerable.GetEnumerator).
12263             In GMCS, the explicit interface name may include type arguments
12264             (IEnumerable<T>.GetEnumerator).
12265           * we use `member_name' instead of just `IDENTIFIER' for
12266             "member names":
12267             The rule is that we use `member_name' wherever a member may
12268             have type parameters in GMCS.       
12269
12270         * decl.cs (MemberName): New public class.
12271         (MemberCore.MemberName): New public readonly field.
12272         (MemberCore.ctor): Take a `MemberName' argument, not a string.
12273         (DeclSpace): Likewise.
12274
12275         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
12276         * enum.cs (Enum.ctor): Likewise.
12277
12278         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
12279         MemberName.     
12280         (AliasEntry.ctor): Take a MemberName, not an Expression.
12281         (AliasEntry.UsingAlias): Likewise.
12282
12283         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
12284         (IMethodData.MemberName): Changed type from string to MemberName.
12285         (MemberBase.ExplicitInterfaceName): Likewise.
12286         (AbstractPropertyEventMethod.SetupName): Make this private.
12287         (AbstractPropertyEventMethod.ctor): Added `string prefix'
12288         argument; compute the member name here.
12289         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
12290         on the `member.MemberName' and the `prefix'.
12291
12292         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
12293         not `type_name'.
12294         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
12295         thus, we get a `MemberName' instead of a `string'.  These
12296         declarations may have type parameters in GMCS.
12297         (interface_method_declaration, delegate_declaration): Likewise.
12298         (class_declaration, interface_declaration): Likewise.
12299         (method_header): Use `namespace_or_type_name' instead of
12300         `member_name'.  We may be an explicit interface implementation.
12301         (property_declaration, event_declaration): Likewise.
12302         (member_name): This is now just an `IDENTIFIER', not a
12303         `namespace_or_type_name'.
12304         (type_name, interface_type): Removed.
12305         (namespace_or_type_name): Return a MemberName, not an Expression.
12306         (primary_expression): Use `member_name' instead of `IDENTIFIER';
12307         call GetTypeExpression() on the MemberName to get an expression.
12308         (IndexerDeclaration.interface_type): Changed type from string to
12309         MemberName.
12310         (MakeName): Operate on MemberName's instead of string's.
12311
12312 2004-09-13  Raja R Harinath  <rharinath@novell.com>
12313
12314         Fix bug #55770.
12315         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
12316         (NamespaceEntry.Lookup): Add new argument to flag if we want the
12317         lookup to avoid symbols introduced by 'using'.
12318         * rootcontext.cs (NamespaceLookup): Update.
12319
12320 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
12321
12322         * class.cs (TypeContainer.DoDefineMembers): Do not call
12323         DefineDefaultConstructor for static classes.
12324
12325 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
12326
12327         * attribute.cs (Attribute.Resolve): Add error 653 report.
12328
12329         * class.cs (Class.ApplyAttributeBuilder): Add error 641
12330         report.
12331         (Method.ApplyAttributeBuilder): Add error 685 report.
12332         (Operator.Define): Add error 564 report.
12333
12334         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
12335
12336         * expression.cs (Invocation.DoResolve): Add error
12337         245 and 250 report.
12338
12339         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
12340         error 674 report.
12341
12342 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
12343
12344         * class.cs (ConstructorInitializer.Resolve):
12345         Wrong error number (515->516).
12346
12347 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
12348
12349         * class.cs (Indexer.Define): Add error 631 report.
12350
12351 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
12352
12353         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
12354
12355 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
12356
12357         * expression.cs (Probe.DoResolve): Add error CS0241 report.
12358
12359 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
12360
12361         * cs-parser.jay: Added error CS0241 report.
12362
12363 2004-09-10  Raja R Harinath  <rharinath@novell.com>
12364
12365         * cs-parser.jay (fixed_statement): Introduce a scope for the
12366         declaration in the 'fixed' statement.
12367
12368 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
12369
12370         * cs-parser.jay: Added CS0230 error report.
12371
12372 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
12373
12374         * cs-parser.jay: Added errors CS0231 and CS0257 report.
12375
12376 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
12377
12378         * expression.cs (Argument.Resolve): Added error CS0192 and
12379         CS0199 report.
12380
12381 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
12382
12383         C# 2.0 #pragma warning feature
12384
12385         * cs-tokenizer.cs (PreProcessPragma): New method; 
12386         Handles #pragma directive.
12387
12388         * report.cs (WarningRegions): New class; Support
12389         class for #pragma warning directive. It tests whether
12390         warning is enabled for a given line.
12391
12392 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
12393
12394         * const.cs: Add more descriptive error report, tahnks to
12395         Sebastien. 
12396
12397 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
12398
12399         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
12400
12401 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
12402
12403         * expression.cs: Apply patch from Ben: Remove dead code from
12404         ArrayCreation, and remove the TurnintoConstant call in const.cs,
12405         as that code just threw an exception anwyays.
12406
12407         * const.cs: Remove the call to the turnintoconstant, for details
12408         see bug: #63144
12409         
12410         * literal.cs: The type of the null-literal is the null type;  So
12411         we use a placeholder type (literal.cs:System.Null, defined here)
12412         for it.
12413
12414         * expression.cs (Conditional.DoResolve): Remove some old code that
12415         is no longer needed, conversions have been fixed.
12416
12417         (ArrayCreationExpression.DoResolve): Return false if we fail to
12418         resolve the inner expression.
12419
12420 2004-09-07  Raja R Harinath  <rharinath@novell.com>
12421
12422         Fix test-290.cs.
12423         * cs-parser.jay (delegate_declaration): Record a delegate
12424         declaration as a type declaration.
12425         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
12426
12427 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
12428
12429         * parameter.cs: Do not crash if the type can not be resolved. 
12430
12431         * expression.cs: Report errors with unsafe pointers, fixes #64896
12432
12433 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
12434
12435         * expression.cs: Pointer arith always needs to do a conv.i
12436         if the operand is a long. fix 65320
12437
12438 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
12439
12440         Fixed cs0619-37.cs, cs0619-38.cs
12441
12442         * enum.cs (GetObsoleteAttribute): Removed.
12443
12444         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
12445         on Enum member is double staged. The first is tested member
12446         and then enum.
12447
12448 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
12449
12450         Fixed #56986, #63631, #65231
12451
12452         * class.cs: (TypeContainer.AddToMemberContainer): New method,
12453         adds member to name container.
12454         (TypeContainer.AddToTypeContainer): New method, adds type to
12455         name container.
12456         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
12457         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
12458         AddOperator): Simplified by reusing AddToMemberContainer.
12459         (TypeContainer.UserDefinedStaticConstructor): Changed to property
12460         instead of field.
12461         (Method.CheckForDuplications): Fixed implementation to test all
12462         possibilities.
12463         (MemberBase): Detection whether member is explicit interface
12464         implementation is now in constructor.
12465         (MemberBase.UpdateMemberName): Handles IndexerName.
12466         (Accessor): Changed to keep also location information.
12467         (AbstractPropertyEventMethod): Is derived from MemberCore.
12468         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
12469         will be emited or not.
12470         (PropertyBase.AreAccessorsDuplicateImplementation):
12471         Tests whether accessors are not in collision with some method.
12472         (Operator): Is derived from MethodCore to simplify common
12473         operations.
12474
12475         * decl.cs (Flags.TestMethodDuplication): Test for duplication
12476         must be performed.
12477         (DeclSpace.AddToContainer): Adds the member to defined_names
12478         table. It tests for duplications and enclosing name conflicts.
12479
12480         * enum.cs (EnumMember): Clean up to reuse the base structures
12481
12482 2004-09-03  Martin Baulig  <martin@ximian.com>
12483
12484         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
12485         into TypeContainer, to make partial classes work again.
12486
12487 2004-09-03  Martin Baulig  <martin@ximian.com>
12488
12489         * rootcontext.cs (RootContext.V2): Removed.
12490
12491 2004-03-23  Martin Baulig  <martin@ximian.com>
12492
12493         * expression.cs (Invocation.OverloadResolve): Added `bool
12494         may_fail' argument and use it instead of the Location.IsNull() hack.
12495
12496 2004-09-03  Martin Baulig  <martin@ximian.com>
12497
12498         Merged latest changes into gmcs.  Please keep this comment in
12499         here, it makes it easier for me to see what changed in MCS since
12500         the last time I merged.
12501
12502 2004-09-03  Raja R Harinath  <rharinath@novell.com>
12503
12504         Fix #61128.
12505         * expression.cs (BetterConversion): Don't allow either conversion 
12506         to be null.  Remove redundant implicit conversion test when 'q ==
12507         null' -- when this function is invoked, we already know that the
12508         implicit conversion exists.
12509         (BetterFunction): Assume that 'best' is non-null.  Remove
12510         redundant reimplementation of IsApplicable when 'best' is null.
12511         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
12512         number of arguments.
12513         (IsAncestralType): Extract from OverloadResolve.
12514         (OverloadResolve): Make robust to the MethodGroupExpr being
12515         unsorted.  Implement all the logic of Section 14.5.5.1, and
12516         support overloading of methods from multiple applicable types.
12517         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
12518
12519         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
12520         (RealError, Warning): Append type of report to related symbol.
12521
12522 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
12523
12524         * enum.cs: Fixed CLS-Compliance checks for enum members.
12525         Error tests cs3008-8.cs, cs3014-8.cs
12526
12527 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
12528
12529         Fixed bug #62342, #63102
12530         * class.cs: ImplementIndexer uses member.IsExplicitImpl
12531         like ImplementMethod.
12532
12533 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
12534
12535         * attribute.cs (Attribute.GetAttributeArgumentExpression):
12536         Fixed bug #65170.
12537
12538 2004-09-02  Martin Baulig  <martin@ximian.com>
12539
12540         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
12541         TypeManager.GetArgumentTypes() rather than calling GetParameters()
12542         on the MethodBase.
12543
12544 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
12545
12546         C# 2.0 Static classes implemented
12547
12548         * class.cs (TypeContainer): instance_constructors,
12549         initialized_fields, initialized_static_fields,
12550         default_constructor, base_inteface_types are protected to be
12551         accessible from StaticClass.
12552         (TypeContainer.DefineDefaultConstructor): New virtual method
12553         for custom default constructor generating
12554         (StaticClass): New class to handle "Static classes" feature.
12555
12556         * cs-parser.jay: Handle static keyword on class like instance
12557         of StaticClass.
12558
12559         * driver.cs: Added "/langversion" command line switch with two
12560         options (iso-1, default).
12561
12562 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
12563
12564         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
12565
12566 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
12567
12568         * delegate.cs: Style.
12569
12570 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
12571
12572         * delegate.cs: Add seperate instance expr field for miguel.
12573
12574 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12575
12576         * PointerArithmetic (Resolve): make sure we are not doing
12577         pointer arith on void*. Also, make sure we are resolved
12578         by not setting eclass until resolve.
12579
12580         All callers: Make sure that PointerArithmetic gets resolved.
12581
12582 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12583
12584         * ArrayCreation (LookupType): If the type does not resolve 
12585         to an array, give an error.
12586
12587 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
12588
12589         * statement.cs (Try.Resolve): Fixed bug #64222
12590
12591 2004-08-27  Martin Baulig  <martin@ximian.com>
12592
12593         * class.cs
12594         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
12595         crash here.     
12596
12597 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
12598
12599         * ecore.cs (Constantify): Get underlying type via
12600         System.Enum.GetUnderlyingType to avoid StackOverflow on the
12601         Windows in special cases.
12602
12603 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
12604
12605         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
12606         for obtaining also private methods.
12607         (GetRemoveMethod): Used GetRemoveMethod (true)
12608         for obtaining also private methods.
12609
12610 2004-08-24  Martin Baulig  <martin@ximian.com>
12611
12612         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
12613         MethodAttributes.HideBySig for operators.
12614
12615 2004-08-23  Martin Baulig  <martin@ximian.com>
12616
12617         Back to the old error reporting system :-)
12618
12619         * report.cs (Message): Removed.
12620         (Report.MessageData, ErrorData, WarningData): Removed.
12621         (Report.Error, Warning): Back to the old system.
12622
12623 2004-08-23  Martin Baulig  <martin@ximian.com>
12624
12625         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
12626
12627         * class.cs (TypeContainer.ParentContainer): New public virtual
12628         method; replaces the explicit interface implementation.
12629         (ClassPart.ParentContainer): Override.
12630
12631 2004-08-23  Martin Baulig  <martin@ximian.com>
12632
12633         * statement.cs (Switch): Added support for constant switches; see
12634         #59428 or test-285.cs.
12635
12636 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
12637
12638         Fixed bug #62740.
12639         * statement.cs (GetEnumeratorFilter): Removed useless
12640         logic because C# specs is strict. GetEnumerator must be
12641         public.
12642
12643 2004-08-22  Martin Baulig  <martin@ximian.com>
12644
12645         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
12646         a switch and may break, reset the barrier.  Fixes #59867.
12647
12648 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
12649
12650         CLS-Compliance speed up (~5% for corlib)
12651
12652         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
12653         New method. Tests container for CLS-Compliant names
12654
12655         * class.cs (TypeContainer.VerifyClsName): New method.
12656         Checks whether container name is CLS Compliant.
12657         (Constructor): Implements IMethodData.
12658
12659         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
12660         low-case table for CLS Compliance test.
12661         (MemberCache.VerifyClsParameterConflict): New method.
12662         Checks method parameters for CS3006 error.
12663
12664         * enum.cs (EnumMember): Is derived from MemberCore.
12665         (Enum.VerifyClsName): Optimized for better performance.
12666
12667 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
12668
12669         * report.cs: Renamed Error_T to Error and changed all
12670         references.
12671
12672 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
12673
12674         * class.cs (TypeContainer.IndexerArrayList): New inner class
12675         container for indexers.
12676         (TypeContainer.DefaultIndexerName): New constant for default
12677         indexer name. Replaced all "Item" with this constant.
12678         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
12679
12680         * typemanager.cs (TypeManager.default_member_ctor): Cache here
12681         DefaultMemberAttribute constructor.
12682
12683 2004-08-05  Martin Baulig  <martin@ximian.com>
12684
12685         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
12686         Fix bug #59429.
12687
12688 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
12689
12690         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
12691         multi platforms problem.
12692
12693         * compiler.csproj: Included shared files.
12694
12695 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
12696
12697         Fix bug 60333, 55971 in the more general way
12698         * attribute.cs (Attribute.GetAttributeArgumentExpression):
12699         Added arg_type argument for constant conversion.
12700         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
12701
12702 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
12703
12704         Fix bug #59760
12705         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
12706         OperatorArrayList, MethodCoreArrayList for typecontainer
12707         containers. Changed class member types to these new types.
12708         (MethodArrayList.DefineMembers): Added test for CS0659.
12709
12710 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
12711
12712         * cfold.cs: Synchronize the folding with the code in expression.cs
12713         Binary.DoNumericPromotions for uint operands.
12714
12715         * attribute.cs: Revert patch from Raja, it introduced a regression
12716         while building Blam-1.2.1 (hard to isolate a test case).
12717
12718 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
12719
12720         Fix for #55382
12721         * class.cs:
12722         (TypeContainer.Define): Renamed to DefineContainerMembers because of
12723         name collision.
12724         (MethodCore.parent_method): New member. The method we're overriding
12725         if this is an override method.
12726         (MethodCore.CheckBase): Moved from Method class and made common.
12727         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
12728         private.
12729         (MethodCore.CheckForDuplications): New abstract method. For custom
12730         member duplication search in a container
12731         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
12732         method and its return type.
12733         (Event.conflict_symbol): New member. Symbol with same name in the
12734         parent class.
12735
12736         * decl.cs:
12737         (MemberCache.FindMemberWithSameName): New method. The method
12738         is looking for conflict with inherited symbols.
12739
12740 2004-08-04  Martin Baulig  <martin@ximian.com>
12741
12742         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
12743
12744         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
12745
12746 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
12747
12748         * report.cs (Message): New enum for better error, warning reference in
12749         the code.
12750         (MessageData): New inner abstract class. It generally handles printing of
12751         error and warning messages.
12752         Removed unused Error, Warning, Message methods.
12753
12754 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
12755
12756         Fix for cs0592-8.cs test
12757         * attribute.cs
12758         (Attributable.ValidAttributeTargets): Made public.
12759         (Attribute.ExplicitTarget): New member for explicit target value.
12760         (Attribute.CheckTargets): Now we translate explicit attribute
12761         target to Target here.
12762
12763 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
12764
12765         * ecore.cs (MethodGroupExpr): new IsBase property.
12766
12767         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
12768
12769         * delegate.cs (DelegateCreation): store a MethodGroupExpr
12770         rather than an instance expr.
12771
12772         (DelegateCreation.Emit): Use the method group rather than
12773         the instance expression. Also, if you have base.Foo as the
12774         method for a delegate, make sure to emit ldftn, not ldftnvirt.
12775
12776         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
12777
12778         (NewDelegate.DoResolve): Only check for the existance of Invoke
12779         if the method is going to be needed. Use MethodGroupExpr.
12780
12781         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
12782
12783         * expression.cs: For pointer arith., make sure to use
12784         the size of the type, not the size of the pointer to
12785         the type.
12786
12787 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
12788
12789         Fix for #60722
12790         * class.cs (Class): Added error CS0502 test.
12791
12792 2004-08-03  John Luke  <jluke@cfl.rr.com>
12793             Raja R Harinath  <rharinath@novell.com>
12794
12795         Fix for #60997.
12796         * attribute.cs (Attribute.complained_before): New flag.
12797         (Attribute.ResolveType, Attribute.Resolve),
12798         (Attribute.DefinePInvokeMethod): Set it.
12799         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
12800         
12801 2004-08-03  Martin Baulig  <martin@ximian.com>
12802
12803         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
12804         use a user-defined operator; we still need to do numeric
12805         promotions in case one argument is a builtin type and the other
12806         one has an implicit conversion to that type.  Fixes #62322.
12807
12808 2004-08-02  Martin Baulig  <martin@ximian.com>
12809
12810         * statement.cs (LocalInfo.Flags): Added `IsThis'.
12811         (LocalInfo.IsThis): New public property.
12812         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
12813
12814 2004-08-01  Martin Baulig  <martin@ximian.com>
12815
12816         * class.cs (TypeContainer.GetClassBases): Don't set the default
12817         here since we may get called from GetPartialBases().
12818         (TypeContainer.DefineType): If GetClassBases() didn't return a
12819         parent, use the default one.
12820
12821 2004-07-30  Duncan Mak  <duncan@ximian.com>
12822
12823         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
12824
12825 2004-07-30  Martin Baulig  <martin@ximian.com>
12826
12827         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
12828
12829         * class.cs (SourceMethod): New public class, derive from the
12830         symbol writer's ISourceMethod.
12831         (Method): Use the new symbol writer API.
12832
12833         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
12834         as argument and use the new symbol writer.
12835
12836         * location.cs
12837         (SourceFile): Implement the symbol writer's ISourceFile.
12838         (Location.SymbolDocument): Removed.
12839         (Location.SourceFile): New public property.
12840
12841         * symbolwriter.cs: Use the new symbol writer API.
12842
12843 2004-07-30  Raja R Harinath  <rharinath@novell.com>
12844
12845         * Makefile (install-local): Remove.  Functionality moved to
12846         executable.make.
12847
12848 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
12849
12850         * Makefile: Install mcs.exe.config file together with mcs.exe.
12851         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
12852         correct runtime version.
12853         
12854 2004-07-25  Martin Baulig  <martin@ximian.com>
12855
12856         * class.cs
12857         (TypeContainer.RegisterOrder): Removed, this was unused.
12858         (TypeContainer, interface_order): Removed.
12859         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
12860         TypeContainer as argument since we can also be called with a
12861         `PartialContainer' for a partial class/struct/interface.
12862         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
12863         of checking whether we're an `Interface' - we could be a
12864         `PartialContainer'.
12865         (PartialContainer.Register): Override; call
12866         AddClass()/AddStruct()/AddInterface() on our parent.
12867
12868         * cs-parser.jay (interface_member_declaration): Add things to the
12869         `current_container', not the `current_class'.
12870
12871         * rootcontext.cs (RegisterOrder): The overloaded version which
12872         takes an `Interface' was unused, removed.
12873
12874         * typemanager.cs (TypeManager.LookupInterface): Return a
12875         `TypeContainer', not an `Interface'.
12876         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
12877         contain a `PartialContainer' for an interface, so check it's
12878         `Kind' to figure out what it is.
12879
12880 2004-07-25  Martin Baulig  <martin@ximian.com>
12881
12882         * class.cs (Class.DefaultTypeAttributes): New public constant.
12883         (Struct.DefaultTypeAttributes): Likewise.
12884         (Interface.DefaultTypeAttributes): Likewise.
12885         (PartialContainer.TypeAttr): Override this and add the
12886         DefaultTypeAttributes.
12887
12888 2004-07-25  Martin Baulig  <martin@ximian.com>
12889
12890         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
12891         we can just use the `Parent' field instead.
12892
12893 2004-07-25  Martin Baulig  <martin@ximian.com>
12894
12895         * class.cs (TypeContainer.Emit): Renamed to EmitType().
12896
12897 2004-07-25  Martin Baulig  <martin@ximian.com>
12898
12899         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
12900         our parts before defining any methods.
12901         (TypeContainer.VerifyImplements): Make this virtual.
12902         (ClassPart.VerifyImplements): Override and call VerifyImplements()
12903         on our PartialContainer.
12904
12905 2004-07-25  Martin Baulig  <martin@ximian.com>
12906
12907         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
12908
12909         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
12910         argument, we can just use the `Parent' field instead.
12911
12912         * class.cs
12913         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
12914         (MemberBase.DoDefine): Likewise.
12915
12916 2004-07-24  Martin Baulig  <martin@ximian.com>
12917
12918         * decl.cs (MemberCore.Parent): New public field.
12919         (DeclSpace.Parent): Moved to MemberCore.
12920
12921         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
12922         (MemberBase.ctor): Added TypeContainer argument, pass it to our
12923         parent's .ctor.
12924         (FieldBase, Field, Operator): Likewise.
12925         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
12926         (EventField, Event): Likewise.
12927
12928 2004-07-23  Martin Baulig  <martin@ximian.com>
12929
12930         * class.cs (PartialContainer): New public class.
12931         (ClassPart): New public class.
12932         (TypeContainer): Added support for partial classes.
12933         (TypeContainer.GetClassBases): Splitted some of the functionality
12934         out into GetNormalBases() and GetPartialBases().
12935
12936         * cs-tokenizer.cs (Token.PARTIAL): New token.
12937         (Tokenizer.consume_identifier): Added some hacks to recognize
12938         `partial', but only if it's immediately followed by `class',
12939         `struct' or `interface'.
12940
12941         * cs-parser.jay: Added support for partial clases.
12942
12943 2004-07-23  Martin Baulig  <martin@ximian.com>
12944
12945         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
12946         a `DeclSpace' and also made it readonly.
12947         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
12948         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
12949         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
12950
12951         * cs-parser.jay: Pass the `current_class', not the
12952         `current_container' (at the moment, this is still the same thing)
12953         to a new Method, Property, Event, Indexer or Constructor.
12954
12955 2004-07-23  Martin Baulig  <martin@ximian.com>
12956
12957         * cs-parser.jay (CSharpParser): Added a new `current_class' field
12958         and removed the `current_interface' one.
12959         (struct_declaration, class_declaration, interface_declaration):
12960         Set `current_class' to the newly created class/struct/interface;
12961         set their `Bases' and call Register() before parsing their body.
12962
12963 2004-07-23  Martin Baulig  <martin@ximian.com>
12964
12965         * class.cs (Kind): New public enum.
12966         (TypeContainer): Made this class abstract.
12967         (TypeContainer.Kind): New public readonly field.
12968         (TypeContainer.CheckDef): New public method; moved here from
12969         cs-parser.jay.
12970         (TypeContainer.Register): New public abstract method.
12971         (TypeContainer.GetPendingImplementations): New public abstract
12972         method.
12973         (TypeContainer.GetClassBases): Removed the `is_class' and
12974         `is_iface' parameters.
12975         (TypeContainer.DefineNestedTypes): Formerly known as
12976         DoDefineType().
12977         (ClassOrStruct): Made this class abstract.
12978
12979         * tree.cs (RootTypes): New public type. 
12980
12981 2004-07-20  Martin Baulig  <martin@ximian.com>
12982
12983         * tree.cs (Tree.RecordNamespace): Removed.
12984         (Tree.Namespaces): Removed.
12985
12986         * rootcontext.cs (RootContext.IsNamespace): Removed.
12987
12988         * cs-parser.jay (namespace_declaration): Just create a new
12989         NamespaceEntry here.
12990
12991 2004-07-20  Martin Baulig  <martin@ximian.com>
12992
12993         * statement.cs (ExceptionStatement): New abstract class.  This is
12994         now used as a base class for everyone who's using `finally'.
12995         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
12996         our local variables before using them.
12997
12998         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
12999         virtual method.  This is used by Yield.Resolve() to "steal" an
13000         outer block's `finally' clauses.
13001         (FlowBranchingException): The .ctor now takes an ExceptionStatement
13002         argument.
13003
13004         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
13005         version which takes an ExceptionStatement.  This version must be
13006         used to create exception branchings.
13007
13008         * iterator.cs
13009         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
13010         (Iterator.EmitMoveNext): Added exception support; protect the
13011         block with a `fault' clause, properly handle 'finally' clauses.
13012         (Iterator.EmitDispose): Run all the `finally' clauses here.
13013
13014 2004-07-20  Martin Baulig  <martin@ximian.com>
13015
13016         * iterator.cs: This is the first of a set of changes in the
13017         iterator code.  Match the spec more closely: if we're an
13018         IEnumerable, then GetEnumerator() must be called.  The first time
13019         GetEnumerator() is called, it returns the current instance; all
13020         subsequent invocations (if any) must create a copy.
13021
13022 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
13023
13024         * expression.cs: Resolve the constant expression before returning
13025         it. 
13026
13027 2004-07-19  Martin Baulig  <martin@ximian.com>
13028
13029         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
13030         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
13031         the return type of the new EmitContext.
13032
13033 2004-07-18  Martin Baulig  <martin@ximian.com>
13034
13035         * class.cs (Property.Define): Fix iterators.
13036
13037         * iterators.cs (Iterator.Define): Moved the
13038         `container.AddInterator (this)' call here from the .ctor; only do
13039         it if we resolved successfully.
13040
13041 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
13042
13043         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
13044         `true' for preprocessing directives that we parse.  The return
13045         value indicates whether we should return to regular tokenizing or
13046         not, not whether it was parsed successfully.
13047
13048         In the past if we were in: #if false ... #line #endif, we would
13049         resume parsing after `#line'.  See bug 61604.
13050
13051         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
13052         building: IsEnumType should return true only for enums, not for
13053         enums or System.Enum itself.  This fixes #61593.
13054
13055         Likely what happened is that corlib was wrong: mcs depended on
13056         this bug in some places.  The bug got fixed, we had to add the
13057         hack, which caused bug 61593.
13058
13059         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
13060         that was a workaround for the older conditions.
13061
13062 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
13063
13064         * assign.cs: IAssignMethod has a new interface, as documented
13065         inline. All assignment code now uses this new api.
13066
13067         * ecore.cs, expression.cs: All classes which implement
13068         IAssignMethod now use the new interface.
13069
13070         * expression.cs (Invocation): add a hack to EmitCall so that
13071         IndexerAccess can be the target of a compound assignment without
13072         evaluating its arguments twice.
13073
13074         * statement.cs: Handle changes in Invocation api.
13075
13076 2004-07-16  Martin Baulig  <martin@ximian.com>
13077
13078         * iterators.cs: Rewrote this.  We're now using one single Proxy
13079         class for both the IEnumerable and the IEnumerator interface and
13080         `Iterator' derives from Class so we can use the high-level API.
13081
13082         * class.cs (TypeContainer.AddIterator): New method.
13083         (TypeContainer.DoDefineType): New protected virtual method, which
13084         is called from DefineType().
13085         (TypeContainer.DoDefineMembers): Call DefineType() and
13086         DefineMembers() on all our iterators.
13087         (TypeContainer.Emit): Call Emit() on all our iterators.
13088         (TypeContainer.CloseType): Call CloseType() on all our iterators.
13089
13090         * codegen.cs (EmitContext.CurrentIterator): New public field.
13091
13092 2004-07-15  Martin Baulig  <martin@ximian.com>
13093
13094         * typemanager.cs
13095         (TypeManager.not_supported_exception_type): New type.   
13096
13097 2004-07-14  Martin Baulig  <martin@ximian.com>
13098
13099         * iterators.cs: Use real error numbers.
13100
13101 2004-07-14  Martin Baulig  <martin@ximian.com>
13102
13103         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
13104         requires this to be a System.Collection.IEnumerable and not a
13105         class implementing that interface.
13106         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
13107
13108 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
13109
13110         * class.cs: Fixed previous fix, it broke some error tests.
13111
13112 2004-07-12  Martin Baulig  <martin@ximian.com>
13113
13114         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
13115         Fixes #61293.
13116
13117 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
13118
13119         * assign.cs (LocalTemporary): Add new argument: is_address,If
13120         `is_address' is true, then the value that we store is the address
13121         to the real value, and not the value itself.
13122         
13123         * ecore.cs (PropertyExpr): use the new local temporary
13124         stuff to allow us to handle X.Y += z (where X is a struct)
13125
13126 2004-07-08  Martin Baulig  <martin@ximian.com>
13127
13128         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
13129         not always return, just like we're doing in Using.Resolve().
13130
13131 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
13132
13133         * cs-parser.jay (fixed_statement): flag this as Pinned.
13134
13135 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
13136
13137         * typemanager.cs (TypeManager): Removed MakePinned method, this
13138         mechanism is replaced with the .NET 2.x compatible mechanism of
13139         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
13140
13141         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
13142         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
13143         `IsFixed' property which has a different meaning.
13144
13145 2004-07-02  Raja R Harinath  <rharinath@novell.com>
13146
13147         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
13148         visible from inside a nested class, not just the names of the
13149         immediately enclosing class.
13150         Fix for bug #60730.
13151
13152 2004-06-24  Raja R Harinath  <rharinath@novell.com>
13153
13154         * expression.cs (BetterConversion): Remove buggy special-case
13155         handling of "implicit constant expression conversions".  At this
13156         point, we already know that the conversion is possible -- we're
13157         only checking to see which is better.
13158
13159 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
13160
13161         * cs-parser.jay: Added error CS0210 test.
13162
13163 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
13164
13165         * cs-parser.jay: Added error CS0134 test.
13166
13167 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
13168
13169         Fix bug #52507
13170         * cs-parser.jay: Added error CS0145 test.
13171
13172 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
13173
13174         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
13175
13176 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
13177         
13178         * expression.cs (StackAlloc.Resolve): The argument may not
13179         be a constant; deal with this case.
13180         
13181 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
13182
13183         * attribute.cs (IndexerName_GetIndexerName): Renamed to
13184         GetIndexerAttributeValue.
13185         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
13186
13187         * class.cs (Indexer.Define): Added error tests for CS0415,
13188         CS0609.
13189
13190 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
13191
13192         * attribute.cs (Attribute.Resolve): Keep field code in sync with
13193         property code.
13194
13195 2004-06-23  Martin Baulig  <martin@ximian.com>
13196
13197         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
13198         neither return nor throw, reset the barrier as well.  Fixes #60457.
13199
13200 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
13201
13202         * class.cs : EventAttributes is now set to None by default.
13203           This fixes bug #60459.
13204
13205 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
13206
13207         Fix bug #60219
13208         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
13209         Don't throw exception but return null (it's sufficient now).
13210
13211 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
13212
13213         * typemanager.cs (GetArgumentTypes): Faster implementation.
13214
13215 2004-06-18  Martin Baulig  <martin@ximian.com>
13216
13217         * attribute.cs (Attribute.Resolve): Check whether we're an
13218         EmptyCast which a Constant child.  Fixes #60333.
13219
13220 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
13221
13222         * statement.cs (EmitCollectionForeach): Account for the fact that
13223         not all valuetypes are in areas which we can take the address of.
13224         For these variables, we store to a temporary variable. Also, make
13225         sure that we dont emit a `callvirt' on a valuetype method.
13226
13227 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
13228
13229         * expression.cs (StackAlloc.DoReSolve): Added test for
13230         negative parameter (CS0247).
13231
13232 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
13233
13234         Fix bug #59792
13235         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
13236
13237 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
13238
13239         Fix bug #59781
13240         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
13241         ulong.
13242
13243 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
13244
13245         Fix bug #58254 & cs1555.cs, cs1556.cs
13246         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
13247
13248 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
13249
13250         * cs-parser.jay: Added error CS1669 test for indexers.
13251
13252 2004-06-11  Martin Baulig  <martin@ximian.com>
13253
13254         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
13255         call this twice: for params and varargs methods.
13256
13257 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
13258
13259         * class.cs:
13260         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
13261
13262 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
13263
13264         * attribute.cs (Attribute.GetValidTargets): Made public.
13265
13266         * class.cs: 
13267         (AbstractPropertyEventMethod): New class for better code sharing.
13268         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
13269         CS1667 report.
13270         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
13271
13272 2004-06-11  Raja R Harinath  <rharinath@novell.com>
13273
13274         Fix bug #59477.
13275         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
13276         that the call to Resolve is part of a MemberAccess.
13277         (Expression.Resolve): Use it for SimpleName resolution.
13278         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
13279         Add 'intermediate' boolean argument.
13280         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
13281         error message when the SimpleName can be resolved ambiguously
13282         between an expression and a type.
13283         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
13284         public.
13285         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
13286         call on the left-side.
13287
13288 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
13289
13290         * class.cs:
13291         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
13292
13293 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
13294
13295         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
13296
13297 2004-06-11  Martin Baulig  <martin@ximian.com>
13298
13299         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
13300         varargs methods if applicable.
13301
13302 2004-06-11  Martin Baulig  <martin@ximian.com>
13303
13304         * expression.cs (Invocation.EmitCall): Don't use
13305         `method.CallingConvention == CallingConventions.VarArgs' since the
13306         method could also have `CallingConventions.HasThis'.
13307
13308 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
13309
13310         * class.cs (Event.GetSignatureForError): Implemented.
13311         Fixed crash in error test cs3010.cs
13312
13313 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
13314
13315         * cs-tokenizer.cs: Change the way we track __arglist to be
13316         consistent with the other keywords.
13317
13318 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
13319
13320         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
13321         tomorrow.
13322
13323 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
13324
13325         * codegen.cs: Check that all referenced assemblies have a strongname
13326         before strongnaming the compiled assembly. If not report error CS1577.
13327         Fix bug #56563. Patch by Jackson Harper.
13328         * typemanager.cs: Added a method to return all referenced assemblies.
13329         Fix bug #56563. Patch by Jackson Harper.
13330
13331 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
13332
13333         * class.cs:
13334         (Method.ApplyAttributeBuilder): Moved and added conditional
13335         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
13336
13337         * delegate.cs:
13338         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
13339
13340 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
13341
13342         Fixed #59640
13343         * class.cs: (EventField.attribute_targets): Changed default target.
13344
13345 2004-06-08  Martin Baulig  <martin@ximian.com>
13346
13347         * expression.cs (Invocation.EmitCall): Enable varargs methods.
13348
13349 2004-06-08  Martin Baulig  <martin@ximian.com>
13350
13351         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
13352
13353 2004-06-07  Martin Baulig  <martin@ximian.com>
13354
13355         Added support for varargs methods.
13356
13357         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
13358         keyword.
13359
13360         * cs-parser.jay: Added support for `__arglist'.
13361
13362         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
13363
13364         * expression.cs (Argument.AType): Added `ArgList'.
13365         (Invocation): Added support for varargs methods.
13366         (ArglistAccess): New public class.
13367         (Arglist): New public class.
13368
13369         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
13370
13371         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
13372         a method's top-level block if the method has varargs.
13373
13374         * support.cs (ReflectionParameters, InternalParameters): Added
13375         support for varargs methods.    
13376
13377 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
13378
13379         * class.cs: Provide location in indexer error report.
13380
13381         * driver.cs: Use standard names.
13382
13383         * namespace.cs: Catch the use of using after a namespace has been
13384         declared also on using aliases.
13385
13386 2004-06-03  Raja R Harinath  <rharinath@novell.com>
13387
13388         Bug #50820.
13389         * typemanager.cs (closure_private_ok, closure_invocation_type)
13390         (closure_qualifier_type, closure_invocation_assembly)
13391         (FilterWithClosure): Move to ...
13392         (Closure): New internal nested class.
13393         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
13394         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
13395         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
13396         (MemberLookup, MemberLookupFailed): Use it.
13397         * expression.cs (New.DoResolve): Treat the lookup for the
13398         constructor as being qualified by the 'new'ed type.
13399         (Indexers.GetIndexersForTypeOrInterface): Update.
13400
13401 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
13402
13403         * attribute.cs
13404         (GetConditionalAttributeValue): New method. Returns
13405         condition of ConditionalAttribute.
13406         (SearchMulti): New method.  Returns all attributes of type 't'.
13407         Use it when attribute is AllowMultiple = true.
13408         (IsConditionalMethodExcluded): New method.
13409
13410         * class.cs
13411         (Method.IsExcluded): Implemented. Returns true if method has conditional
13412         attribute and the conditions is not defined (method is excluded).
13413         (IMethodData): Extended interface for ConditionalAttribute support.
13414         (PropertyMethod.IsExcluded): Implemented.
13415
13416         * decl.cs
13417         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
13418
13419         * expression.cs
13420         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
13421         on the method.
13422
13423 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
13424
13425         * expression.cs (ArrayCreationExpression): Make this just an
13426         `expression'. It can't be a statement, so the code here was
13427         dead.
13428
13429 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
13430
13431         Fixed #59072
13432         * typemanager.cs (GetFullNameSignature): New method for
13433         MethodBase types.
13434
13435 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
13436
13437         Fixed #56452
13438         * class.cs (MemberBase.GetSignatureForError): New virtual method.
13439         Use this method when MethodBuilder is null.
13440         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
13441         Added test for error CS0626 (MONO reports error for this situation).
13442         (IMethodData.GetSignatureForError): Extended interface.
13443
13444 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
13445
13446         * attribute.cs
13447         (AttributeTester.GetObsoleteAttribute): Returns instance of
13448         ObsoleteAttribute when type is obsolete.
13449
13450         * class.cs
13451         (TypeContainer.VerifyObsoleteAttribute): Override.
13452         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
13453         (MethodCode.VerifyObsoleteAttribute): Override.
13454         (MemberBase.VerifyObsoleteAttribute): Override.
13455
13456         * decl.cs
13457         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
13458         and report proper error.
13459
13460         *delegate.cs
13461         Delegate.VerifyObsoleteAttribute): Override.
13462
13463         * ecore.cs
13464         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
13465         and report proper error.
13466         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
13467
13468         * enum.cs
13469         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
13470         and enum member.
13471
13472         * expression.cs
13473         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
13474         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
13475         Added test for ObsoleteAttribute.
13476
13477         * statement.cs
13478         (Catch): Derived from Statement.
13479
13480 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
13481  
13482         Fixed bug #59071 & cs0160.cs
13483  
13484         * statement.cs (Try.Resolve): Check here whether order of catch
13485         clauses matches their dependencies.
13486
13487 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
13488
13489         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
13490         caused a regression: #59343.  Referencing nested classes from an
13491         assembly stopped working.
13492
13493 2004-05-31  Martin Baulig  <martin@ximian.com>
13494
13495         MCS is now frozen for beta 2.
13496
13497 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
13498
13499         * convert.cs: add a trivial cache for overload operator resolution.
13500
13501 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
13502
13503         * decl.cs: If possible, use lookuptypedirect here. We can only do
13504         this if there is no `.' after the namespace. Avoids using
13505         LookupType, which does lots of slow processing.
13506         (FindNestedType) New method, does what it says :-).
13507         * namespace.cs: use LookupTypeDirect.
13508         * rootcontext.cs: use membercache, if possible.
13509         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
13510
13511 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
13512
13513         * expression.cs:
13514         According to the spec, 
13515
13516         In a member access of the form E.I, if E is a single identifier,
13517         and if the meaning of E as a simple-name (§7.5.2) is a constant,
13518         field, property, localvariable, or parameter with the same type as
13519         the meaning of E as a type-name (§3.8), then both possible
13520         meanings of E are permitted.
13521
13522         We did not check that E as a simple-name had the same type as E as
13523         a type name.
13524
13525         This trivial check gives us 5-7% on bootstrap time.
13526
13527 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
13528
13529         * expression.cs (Invocation.OverloadResolve): Avoid the
13530         use of hashtables and boxing here by allocating on demand.
13531
13532 2004-05-30  Martin Baulig  <martin@ximian.com>
13533
13534         * rootcontext.cs (RootContext.LookupType): Don't cache things if
13535         we're doing a silent lookup.  Don't try to lookup nested types in
13536         TypeManager.object_type (thanks to Ben Maurer).
13537
13538 2004-05-30  Martin Baulig  <martin@ximian.com>
13539
13540         Committing a patch from Ben Maurer.
13541
13542         * rootcontext.cs (RootContext.LookupType): Cache negative results.
13543
13544 2004-05-29  Martin Baulig  <martin@ximian.com>
13545
13546         * class.cs (IMethodData.ShouldIgnore): New method.
13547
13548         * typemanager.cs (TypeManager.MethodFlags): Don't take a
13549         `Location' argument, we don't need it anywhere.  Use
13550         `IMethodData.ShouldIgnore ()' instead of
13551         `MethodData.GetMethodFlags ()'.
13552         (TypeManager.AddMethod): Removed.
13553         (TypeManager.AddMethod2): Renamed to AddMethod.
13554
13555 2004-05-29  Martin Baulig  <martin@ximian.com>
13556
13557         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
13558
13559         * convert.cs (Convert.ImplicitReferenceConversion): If we're
13560         converting from a class type S to an interface type and we already
13561         have an object on the stack, don't box it again.  Fixes #52578.
13562
13563 2004-05-29  Martin Baulig  <martin@ximian.com>
13564
13565         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
13566         Added support for `params' parameters.  Fixes #59267.
13567
13568 2004-05-29  Martin Baulig  <martin@ximian.com>
13569
13570         * literal.cs (NullPointer): Provide a private .ctor which sets
13571         `type' to TypeManager.object_type.  Fixes #59048.
13572
13573 2004-05-29  Martin Baulig  <martin@ximian.com>
13574
13575         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
13576         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
13577
13578         * ecore.cs (EventExpr.instance_expr): Make the field private.
13579
13580 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
13581
13582         Fixed bug #50080 & cs0214-2.cs
13583         * expression.cs (Cast.DoResolve): Check unsafe context here.
13584         
13585         * statement.cs (Resolve.DoResolve): Likewise.
13586
13587 2004-05-26  Martin Baulig  <martin@ximian.com>
13588
13589         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
13590
13591         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
13592         (RootContext.LookupType): Pass down the `silent' flag.
13593
13594 2004-05-25  Martin Baulig  <martin@ximian.com>
13595
13596         * expression.cs
13597         (MethodGroupExpr.IdenticalTypeName): New public property.
13598         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
13599         expression actually refers to a type.
13600
13601 2004-05-25  Martin Baulig  <martin@ximian.com>
13602
13603         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
13604         for #56176 and made it actually work.
13605
13606 2004-05-25  Martin Baulig  <martin@ximian.com>
13607
13608         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
13609         (FieldExpr, PropertyExpr): Override and implement
13610         CacheTemporaries.  Fixes #52279.
13611
13612 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
13613
13614         * location.cs: In the new compiler listing a file twice is a
13615         warning, not an error.
13616
13617 2004-05-24  Martin Baulig  <martin@ximian.com>
13618
13619         * enum.cs (Enum.DefineType): For the `BaseType' to be a
13620         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
13621
13622 2004-05-24  Martin Baulig  <martin@ximian.com>
13623
13624         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
13625         walking the `using' list.  Fixes #53921.
13626
13627 2004-05-24  Martin Baulig  <martin@ximian.com>
13628
13629         * const.cs (Const.LookupConstantValue): Added support for
13630         EmptyCast's; fixes #55251.
13631
13632 2004-05-24  Martin Baulig  <martin@ximian.com>
13633
13634         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
13635         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
13636         which does the CS0135 check.  The reason is that we first need to
13637         check whether the variable actually exists.
13638
13639 2004-05-24  Martin Baulig  <martin@ximian.com>
13640
13641         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
13642         than RootContext.LookupType() to find the explicit interface
13643         type.  Fixes #58584.
13644
13645 2004-05-24  Raja R Harinath  <rharinath@novell.com>
13646
13647         * Makefile: Simplify.  Use executable.make.
13648         * mcs.exe.sources: New file.  List of sources of mcs.exe.
13649
13650 2004-05-24  Anders Carlsson  <andersca@gnome.org>
13651
13652         * decl.cs:
13653         * enum.cs:
13654         Use the invariant culture when doing String.Compare for CLS case
13655         sensitivity.
13656         
13657 2004-05-23  Martin Baulig  <martin@ximian.com>
13658
13659         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
13660         don't have any dots.  Fixes #52622, added cs0246-8.cs.
13661
13662         * namespace.cs (NamespaceEntry.Lookup): Likewise.
13663         
13664 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
13665
13666         * class.cs (MemberBase.Define): Reuse MemberType member for 
13667         resolved type. Other methods can use it too.
13668
13669 2004-05-23  Martin Baulig  <martin@ximian.com>
13670
13671         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
13672         the variable also exists in the current block (otherwise, we need
13673         to report a CS0103).  Fixes #58670.
13674
13675 2004-05-23  Martin Baulig  <martin@ximian.com>
13676
13677         * flowanalysis.cs (Reachability.Reachable): Compute this
13678         on-the-fly rather than storing it as a field.
13679
13680 2004-05-23  Martin Baulig  <martin@ximian.com>
13681
13682         * flowanalysis.cs (Reachability.And): Manually compute the
13683         resulting `barrier' from the reachability.      
13684        
13685 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
13686
13687         Fix bug #57835
13688         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
13689         instance of ObsoleteAttribute when symbol is obsolete.
13690
13691         * class.cs
13692         (IMethodData): Extended interface for ObsoleteAttribute support.
13693
13694 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
13695
13696         * attribute.cs: Fix bug #55970
13697
13698 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
13699
13700         Fix bug #52705
13701         * attribute.cs
13702         (GetObsoleteAttribute): New method. Creates the instance of
13703         ObsoleteAttribute.
13704         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
13705         ObsoleteAttribute when member is obsolete.
13706         (AttributeTester.Report_ObsoleteMessage): Common method for
13707         Obsolete error/warning reporting.
13708
13709         * class.cs
13710         (TypeContainer.base_classs_type): New member for storing parent type.
13711
13712         * decl.cs
13713         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
13714         for this MemberCore.
13715
13716 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
13717
13718         * attribute.cs, const.cs: Fix bug #58590
13719
13720 2004-05-21  Martin Baulig  <martin@ximian.com>
13721
13722         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
13723         out parameters if the end of the method is unreachable.  Fixes
13724         #58098. 
13725
13726 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
13727
13728         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
13729         Hari was right, why extra method.
13730
13731 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
13732
13733         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
13734
13735 2004-05-20  Martin Baulig  <martin@ximian.com>
13736
13737         Merged this back from gmcs to keep the differences to a minumum.
13738
13739         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
13740         instead of a Declspace.
13741         (Attribute.ResolveType): Likewise.
13742         (Attributes.Search): Likewise.
13743         (Attributes.Contains): Likewise.
13744         (Attributes.GetClsCompliantAttribute): Likewise.
13745
13746         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
13747         argument.
13748         (MethodData.ApplyAttributes): Take an EmitContext instead of a
13749         DeclSpace.
13750
13751 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
13752
13753         Fix bug #58688 (MCS does not report error when the same attribute
13754         is assigned twice)
13755
13756         * attribute.cs (Attribute.Emit): Distinction between null and default.
13757
13758 2004-05-19  Raja R Harinath  <rharinath@novell.com>
13759
13760         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
13761         of a top-level attribute without an attribute target.
13762         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
13763         Make non-static.
13764         (Attribute.Conditional_GetConditionName), 
13765         (Attribute.Obsolete_GetObsoleteMessage): Update.
13766         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
13767         part of ScanForIndexerName.
13768         (Attribute.CanIgnoreInvalidAttribute): New function.
13769         (Attribute.ScanForIndexerName): Move to ...
13770         (Attributes.ScanForIndexerName): ... here.
13771         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
13772         (Attributes.Search): New internal variant that can choose not to
13773         complain if types aren't resolved.  The original signature now
13774         complains.
13775         (Attributes.GetClsCompliantAttribute): Use internal variant, with
13776         complaints suppressed.
13777         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
13778         only if it not useful.
13779         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
13780         top-level for attributes that are shared between the assembly
13781         and a top-level class.
13782         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
13783         * class.cs: Update to reflect changes.
13784         (DefineIndexers): Fuse loops.
13785         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
13786         a couple more variants of attribute names.
13787
13788 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
13789
13790         Fix bug #52585 (Implemented explicit attribute declaration)
13791
13792         * attribute.cs:
13793         (Attributable.ValidAttributeTargets): New abstract method. It gets
13794         list of valid attribute targets for explicit target declaration.
13795         (Attribute.Target): It holds target itself.
13796         (AttributeSection): Removed.
13797         (Attribute.CheckTargets): New method. It checks whether attribute
13798         target is valid for the current element.
13799
13800         * class.cs:
13801         (EventProperty): New class. For events that are declared like
13802         property (with add and remove accessors).
13803         (EventField): New class. For events that are declared like field.
13804         class.cs
13805
13806         * cs-parser.jay: Implemented explicit attribute target declaration.
13807
13808         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
13809         Override ValidAttributeTargets.
13810
13811         * parameter.cs:
13812         (ReturnParameter): Class for applying custom attributes on 
13813         the return type.
13814         (ParameterAtribute): New class. Class for applying custom
13815         attributes on the parameter type.
13816
13817 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
13818
13819         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
13820         definitions. 
13821
13822         (Method): Allow UNSAFE here.
13823
13824         * modifiers.cs: Support unsafe reporting.
13825
13826 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
13827
13828         * decl.cs: Fix bug #58478.
13829
13830 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13831
13832         * statement.cs: When checking for unreachable code on an EmptyStatement,
13833         set the location. Fixes bug #58488.
13834
13835 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
13836
13837         * driver.cs: Add -pkg handling.
13838
13839         From Gonzalo: UseShelLExecute=false
13840
13841 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
13842
13843         * attribute.cs:
13844         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
13845         for attribute.
13846         (Attribute.IsClsCompliaceRequired): Moved to base for better
13847         accesibility.
13848         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
13849         when attribute is AttributeUsageAttribute.
13850         (Attribute.GetValidTargets): Simplified.
13851         (Attribute.GetAttributeUsage): New method returns AttributeUsage
13852         attribute for this type.
13853         (Attribute.ApplyAttributes): Method renamed to Emit and make
13854         non-static.
13855         (GlobalAttributeSection): New class for special handling of global
13856         attributes (assembly, module).
13857         (AttributeSection.Emit): New method.
13858
13859         * class.cs: Implemented Attributable abstract methods.
13860         (MethodCore.LabelParameters): Moved to Parameter class.
13861         (Accessor): Is back simple class.
13862         (PropertyMethod): Implemented Attributable abstract class.
13863         (DelegateMethod): Implemented Attributable abstract class.
13864         (Event): New constructor for disctintion between normal Event
13865         and Event with accessors.
13866
13867         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
13868
13869         * codegen.cs, const.cs, decl.cs, delegate.cs:
13870         (CommonAssemblyModulClass): Implemented Attributable abstract class
13871         and simplified.
13872
13873         * enum.cs: Implement IAttributeSupport interface.
13874         (EnumMember): New class for emum members. Implemented Attributable
13875         abstract class
13876
13877         * parameter.cs:
13878         (ParameterBase): Is abstract.
13879         (ReturnParameter): New class for easier [return:] attribute handling.
13880
13881         * typemanager.cs: Removed builder_to_attr.
13882
13883 2004-05-11  Raja R Harinath  <rharinath@novell.com>
13884
13885         Fix bug #57151.
13886         * attribute.cs (Attribute.GetPositionalValue): New function.
13887         * class.cs (TypeContainer.VerifyMembers): New function.
13888         (TypeContainer.Emit): Use it.
13889         (ClassOrStruct): New base class for Class and Struct.
13890         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
13891         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
13892         class.
13893         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
13894         then each non-static field should have a FieldOffset attribute.
13895         Otherwise, none of the fields should have a FieldOffset attribute.
13896         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
13897         and FieldOffset attributes.
13898         * typemanager.cs (TypeManager.struct_layout_attribute_type)
13899         (TypeManager.field_offset_attribute_type): New core types.
13900         (TypeManager.InitCoreTypes): Initialize them.
13901
13902 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
13903
13904         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
13905         Return correct type.
13906         From bug #58270.
13907
13908 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
13909
13910         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
13911         be implicitly converted to ulong.
13912         
13913         * expression.cs: The logic for allowing operator &, | and ^ worked
13914         was wrong, it worked before because we did not report an error in
13915         an else branch.  Fixes 57895.
13916
13917         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
13918         allow volatile fields to be reference types.
13919
13920 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
13921
13922         * driver.cs: Add support for /debug-
13923
13924 2004-05-07  Raja R Harinath  <rharinath@novell.com>
13925
13926         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
13927         Add a 'complain' parameter to silence errors.
13928         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
13929         silently overlooked type-resolutions.
13930         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
13931         to reflect changes.
13932         (Attributes.Search): New function.
13933         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
13934         (Attributes.GetAttributeFullName): Remove hack.
13935         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
13936         Update to reflect changes.
13937         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
13938         Use Attributes.Search instead of nested loops.
13939
13940 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
13941
13942         * decl.cs:
13943         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
13944         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
13945         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
13946
13947         * report.cs: (Report.Warning): Renamed to Warning_T because of
13948         parameter collision.
13949
13950 2004-05-05  Raja R Harinath  <rharinath@novell.com>
13951
13952         * expression.cs (MemberAccess.ResolveMemberAccess):
13953         Exit with non-zero status after Report.Error.
13954         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
13955         Likewise.
13956         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
13957
13958 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
13959
13960         * support.cs: Don't hang when the file is empty.
13961
13962 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
13963
13964         * support.cs: In SeekableStreamReader, compute the preamble size of the
13965           underlying stream. Position changes should take into account that initial
13966           count of bytes.
13967
13968 2004-05-03  Todd Berman  <tberman@sevenl.net>
13969
13970         * driver.cs: remove unused GetSysVersion function.
13971
13972 2004-05-03  Todd Berman  <tberman@sevenl.net>
13973
13974         * driver.cs: Remove the hack from saturday, as well as the hack
13975         from jackson (LoadAssemblyFromGac), also adds the CWD to the
13976         link_paths to get that bit proper.
13977
13978 2004-05-01  Todd Berman  <tberman@sevenl.net>
13979
13980         * driver.cs: Try a LoadFrom before a Load, this checks the current
13981         path. This is currently a bug in mono that is be fixed, however, this
13982         provides a workaround for now. This will be removed when the bug
13983         is fixed.
13984
13985 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
13986
13987         * CryptoConvert.cs: Updated to latest version. Fix issue with 
13988         incomplete key pairs (#57941).
13989
13990 2004-05-01  Todd Berman  <tberman@sevenl.net>
13991
13992         * driver.cs: Remove '.' from path_chars, now System.* loads properly
13993         from the GAC
13994
13995 2004-04-30  Jackson Harper  <jackson@ximian.com>
13996
13997         * codegen.cs: Open keys readonly.
13998         
13999 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14000
14001         * typemanager.cs: don't report cyclic struct layout when a struct
14002         contains 2 or more fields of the same type. Failed for Pango.AttrShape
14003         which has 2 Pango.Rectangle fields.
14004
14005 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
14006
14007         * expression.cs: Handle IntPtr comparisons with IL code
14008         rather than a method call.
14009
14010 2004-04-29  Martin Baulig  <martin@ximian.com>
14011
14012         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
14013         the list of PropertyInfo's in class hierarchy and find the
14014         accessor.  Fixes #56013.
14015
14016 2004-04-29  Martin Baulig  <martin@ximian.com>
14017
14018         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
14019
14020 2004-04-29  Martin Baulig  <martin@ximian.com>
14021
14022         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
14023
14024         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
14025
14026 2004-04-29  Martin Baulig  <martin@ximian.com>
14027
14028         * class.cs (ConstructorInitializer.Resolve): Check whether the
14029         parent .ctor is accessible.  Fixes #52146.
14030
14031 2004-04-29  Martin Baulig  <martin@ximian.com>
14032
14033         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
14034
14035         * statement.cs (Using.EmitLocalVariableDecls): Use
14036         TypeManager.idisposable_type, not typeof (IDisposable).
14037         (Foreach.EmitCollectionForeach): Added support for valuetypes.
14038
14039 2004-04-29  Martin Baulig  <martin@ximian.com>
14040
14041         * class.cs (Event.Define): Don't emit the field and don't set
14042         RTSpecialName and SpecialName for events on interfaces.  Fixes
14043         #57703. 
14044
14045 2004-04-29  Raja R Harinath  <rharinath@novell.com>
14046
14047         Refactor Attribute.ApplyAttributes.
14048         * attribute.cs (Attributable): New base class for objects that can
14049         have Attributes applied on them.
14050         (Attribute): Make AttributeUsage fields public.
14051         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
14052         (Attribute.IsInternalCall): New property.
14053         (Attribute.UsageAttr): Convert to a public read-only property.
14054         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
14055         (Attribute.ResolveType, Attribute.Resolve)
14056         (Attribute.ScanForIndexerName): Update to reflect changes.
14057         (Attribute.CheckAttributeTarget): Re-format.
14058         (Attribute.ApplyAttributes): Refactor, to various
14059         Attributable.ApplyAttributeBuilder methods.
14060         * decl.cs (MemberCore): Make Attributable.
14061         * class.cs (Accessor): Make Attributable.
14062         (MethodData.ApplyAttributes): Use proper attribute types, not
14063         attribute names.
14064         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
14065         (TypeContainer.ApplyAttributeBuilder)
14066         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
14067         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
14068         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
14069         (Operator.ApplyAttributeBuilder): New factored-out methods.
14070         * const.cs (Const.ApplyAttributeBuilder): Likewise.
14071         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
14072         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
14073         * parameter.cs (ParameterBase): New Attributable base class
14074         that can also represent Return types.
14075         (Parameter): Update to the changes.
14076
14077 2004-04-29  Jackson Harper  <jackson@ximian.com>
14078
14079         * driver.cs: Prefer the corlib system version when looking for
14080         assemblies in the GAC. This is still a hack, but its a better hack
14081         now.
14082         
14083 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
14084
14085         * decl.cs, enum.cs: Improved error 3005 reporting.
14086   
14087         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
14088         (related_symbols): New private member for list of symbols
14089         related to reported error/warning.
14090         
14091         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
14092
14093 2004-04-29  Martin Baulig  <martin@ximian.com>
14094
14095         * ecore.cs (Expression.Constantify): If we're an enum and
14096         TypeManager.TypeToCoreType() doesn't give us another type, use
14097         t.UnderlyingSystemType.  Fixes #56178.  
14098
14099 2004-04-29  Martin Baulig  <martin@ximian.com>
14100
14101         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
14102         interfaces and for each interface, only add members directly
14103         declared in that interface.  Fixes #53255.
14104
14105 2004-04-28  Martin Baulig  <martin@ximian.com>
14106
14107         * expression.cs (ConditionalLogicalOperator): Use a temporary
14108         variable for `left' to avoid that we evaluate it more than once;
14109         bug #52588.
14110
14111 2004-04-28  Martin Baulig  <martin@ximian.com>
14112
14113         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
14114         `void[]' (CS1547).
14115
14116 2004-04-28  Martin Baulig  <martin@ximian.com>
14117
14118         * statement.cs (LocalInfo.Resolve): Check whether the type is not
14119         void (CS1547).
14120
14121         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
14122         whether the type is not void (CS1547).
14123
14124 2004-04-28  Martin Baulig  <martin@ximian.com>
14125
14126         * expression.cs (Unary.DoResolveLValue): Override this and report
14127         CS0131 for anything but Operator.Indirection.
14128
14129 2004-04-28  Martin Baulig  <martin@ximian.com>
14130
14131         Committing a patch from Ben Maurer; see bug #50820.
14132
14133         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
14134         check for classes.
14135
14136         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
14137         classes.        
14138
14139 2004-04-28  Martin Baulig  <martin@ximian.com>
14140
14141         Committing a patch from Ben Maurer; see bug #50820.
14142
14143         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
14144         check for classes.
14145
14146         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
14147         classes.        
14148
14149 2004-04-28  Martin Baulig  <martin@ximian.com>
14150
14151         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
14152         (Block.AddLabel): Call DoLookupLabel() to only search in the
14153         current block.
14154
14155 2004-04-28  Martin Baulig  <martin@ximian.com>
14156
14157         * cfold.cs (ConstantFold.BinaryFold): Added special support for
14158         comparing StringConstants and NullLiterals in Equality and Inequality.
14159
14160 2004-04-28  Jackson Harper  <jackson@ximian.com>
14161
14162         * driver.cs: Attempt to load referenced assemblies from the
14163         GAC. This is the quick and dirty version of this method that
14164         doesnt take into account versions and just takes the first
14165         canidate found. Will be good enough for now as we will not have more
14166         then one version installed into the GAC until I update this method.
14167
14168 2004-04-28  Martin Baulig  <martin@ximian.com>
14169
14170         * typemanager.cs (TypeManager.CheckStructCycles): New public
14171         static method to check for cycles in the struct layout.
14172
14173         * rootcontext.cs (RootContext.PopulateTypes): Call
14174         TypeManager.CheckStructCycles() for each TypeContainer.
14175         [Note: We only need to visit each type once.]
14176
14177 2004-04-28  Martin Baulig  <martin@ximian.com>
14178
14179         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
14180
14181         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
14182         success and added `out object value'.  Use a `bool resolved' field
14183         to check whether we've already been called rather than
14184         `ConstantValue != null' since this breaks for NullLiterals.
14185
14186 2004-04-28  Raja R Harinath  <rharinath@novell.com>
14187
14188         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
14189         setting of this flag, since the 'set' method may be non-public.
14190
14191 2004-04-28  Raja R Harinath  <rharinath@novell.com>
14192
14193         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
14194         check on current_vector.Block.
14195
14196 2004-04-27  Martin Baulig  <martin@ximian.com>
14197
14198         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
14199         a field initializer.  Fixes #56459.
14200
14201 2004-04-27  Martin Baulig  <martin@ximian.com>
14202
14203         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
14204         we're not attempting to use an indexer.  Fixes #52154.
14205
14206 2004-04-27  Martin Baulig  <martin@ximian.com>
14207
14208         * statement.cs (Return): Don't create a return label if we don't
14209         need it; reverts my change from January 20th.  Thanks to Ben
14210         Maurer for this.
14211
14212 2004-04-27  Martin Baulig  <martin@ximian.com>
14213
14214         According to the spec, `goto' can only leave a nested scope, but
14215         never enter it.
14216
14217         * statement.cs (Block.LookupLabel): Only lookup in the current
14218         block, don't recurse into parent or child blocks.
14219         (Block.AddLabel): Check in parent and child blocks, report
14220         CS0140/CS0158 if we find a duplicate.
14221         (Block): Removed this indexer for label lookups.
14222         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
14223         this already does the error reporting for us.
14224
14225         * flowanalysis.cs
14226         (FlowBranching.UsageVector.Block): New public variable; may be null.
14227         (FlowBranching.CreateSibling): Added `Block' argument.
14228         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
14229         label for the target of a `goto' and check whether we're not
14230         leaving a `finally'.
14231
14232 2004-04-27  Martin Baulig  <martin@ximian.com>
14233
14234         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
14235         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
14236         just for returns).
14237
14238 2004-04-27  Martin Baulig  <martin@ximian.com>
14239
14240         * statement.cs (Block.AddLabel): Also check for implicit blocks
14241         and added a CS0158 check.
14242
14243 2004-04-27  Martin Baulig  <martin@ximian.com>
14244
14245         * flowanalysis.cs (FlowBranchingLoop): New class.
14246         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
14247         UsageVector's instead of an ArrayList.
14248         (FlowBranching.Label): Likewise.
14249         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
14250         (FlowBranching.AddBreakVector): New method.
14251
14252 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
14253
14254         * attribute.cs: Small regression fix: only convert the type if we
14255         the type is different, fixes System.Drawing build.
14256
14257 2004-04-27  Martin Baulig  <martin@ximian.com>
14258
14259         * attribute.cs (Attribute.Resolve): If we have a constant value
14260         for a named field or property, implicity convert it to the correct
14261         type.
14262
14263 2004-04-27  Raja R Harinath  <rharinath@novell.com>
14264
14265         * statement.cs (Block.Block): Implicit blocks share
14266         'child_variable_names' fields with parent blocks.
14267         (Block.AddChildVariableNames): Remove.
14268         (Block.AddVariable): Mark variable as "used by a child block" in
14269         every surrounding block.
14270         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
14271         been used in a child block, complain about violation of "Invariant
14272         meaning in blocks" rule.
14273         * cs-parser.jay (declare_local_variables): Don't use
14274         AddChildVariableNames.
14275         (foreach_statement): Don't create an implicit block: 'foreach'
14276         introduces a scope.
14277
14278 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
14279
14280         * convert.cs (ImplicitNumericConversion): 0 is also positive when
14281         converting from 0L to ulong.  Fixes 57522.
14282
14283 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
14284
14285         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
14286         derived class hides via 'new' keyword field from base class (test-242.cs).
14287         TODO: Handle this in the more general way.
14288         
14289         * class.cs (CheckBase): Ditto.
14290
14291 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
14292
14293         * decl.cs (caching_flags): New member for storing cached values
14294         as bit flags.
14295         (MemberCore.Flags): New enum where bit flags for caching_flags
14296         are defined.
14297         (MemberCore.cls_compliance): Moved to caching_flags.
14298         (DeclSpace.Created): Moved to caching_flags.
14299
14300         * class.cs: Use caching_flags instead of DeclSpace.Created
14301         
14302 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
14303
14304         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
14305         if we are only a derived class, not a nested class.
14306
14307         * typemanager.cs: Same as above, but do this at the MemberLookup
14308         level (used by field and methods, properties are handled in
14309         PropertyExpr).   Allow for the qualified access if we are a nested
14310         method. 
14311
14312 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
14313
14314         * class.cs: Refactoring.
14315         (IMethodData): New inteface; Holds links to parent members
14316         to avoid member duplication (reduced memory allocation).
14317         (Method): Implemented IMethodData interface.
14318         (PropertyBase): New inner classes for get/set methods.
14319         (PropertyBase.PropertyMethod): Implemented IMethodData interface
14320         (Event): New inner classes for add/remove methods.
14321         (Event.DelegateMethod): Implemented IMethodData interface.
14322
14323         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
14324         EmitContext (related to class.cs refactoring).
14325
14326 2004-04-21  Raja R Harinath  <rharinath@novell.com>
14327
14328         * delegate.cs (Delegate.VerifyApplicability): If the number of
14329         arguments are the same as the number of parameters, first try to
14330         verify applicability ignoring  any 'params' modifier on the last
14331         parameter.
14332         Fixes #56442.
14333
14334 2004-04-16  Raja R Harinath  <rharinath@novell.com>
14335
14336         * class.cs (TypeContainer.AddIndexer): Use
14337         'ExplicitInterfaceName' to determine if interface name was
14338         explicitly specified.  'InterfaceType' is not initialized at this time.
14339         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
14340         Indexers array is already in the required order.  Initialize
14341         'IndexerName' only if there are normal indexers.
14342         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
14343         (TypeContainer.Emit): Emit DefaultMember attribute only if
14344         IndexerName is initialized.
14345         Fixes #56300.
14346
14347 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
14348
14349         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
14350         Fixes #57007
14351
14352 2004-04-15  Raja R Harinath  <rharinath@novell.com>
14353
14354         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
14355         attributes.
14356         Fix for #56456.
14357
14358         * attribute.cs (Attribute.Resolve): Check for duplicate named
14359         attributes.
14360         Fix for #56463.
14361
14362 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
14363
14364         * iterators.cs (MarkYield): track whether we are in an exception,
14365         and generate code accordingly.  Use a temporary value to store the
14366         result for our state.
14367
14368         I had ignored a bit the interaction of try/catch with iterators
14369         since their behavior was not entirely obvious, but now it is
14370         possible to verify that our behavior is the same as MS .NET 2.0
14371
14372         Fixes 54814
14373
14374 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
14375
14376         * iterators.cs: Avoid creating temporaries if there is no work to
14377         do. 
14378
14379         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
14380         Enumerations, use TypeManager.EnumToUnderlying and call
14381         recursively. 
14382
14383         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
14384         bug #57013
14385
14386         (This.Emit): Use EmitContext.EmitThis to emit our
14387         instance variable.
14388
14389         (This.EmitAssign): Ditto.
14390
14391         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
14392         codepaths, we will move all the functionality into
14393         Mono.CSharp.This 
14394
14395         (FieldExpr.EmitAssign): Ditto.
14396
14397         This fixes several hidden bugs that I uncovered while doing a code
14398         review of this today.
14399
14400         * codegen.cs (EmitThis): reworked so the semantics are more clear
14401         and also support value types "this" instances.
14402
14403         * iterators.cs: Changed so that for iterators in value types, we
14404         do not pass the value type as a parameter.  
14405
14406         Initialization of the enumerator helpers is now done in the caller
14407         instead of passing the parameters to the constructors and having
14408         the constructor set the fields.
14409
14410         The fields have now `assembly' visibility instead of private.
14411
14412 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
14413
14414         * expression.cs (Argument.Resolve): Check if fields passed as ref
14415         or out are contained in a MarshalByRefObject.
14416
14417         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
14418         another compiler type.
14419
14420 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
14421
14422         * class.cs (Indexer.Define): use the new name checking method.
14423         Also, return false on an error.
14424         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
14425         (is_identifier_[start/part]_character): make static.
14426
14427 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
14428
14429         * expression.cs (Binary.ResolveOperator): Do no append strings
14430         twice: since we can be invoked more than once (array evaluation)
14431         on the same concatenation, take care of this here.  Based on a fix
14432         from Ben (bug #56454)
14433
14434 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
14435
14436         * codegen.cs: Fix another case where CS1548 must be reported (when 
14437         delay-sign isn't specified and no private is available #56564). Fix
14438         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
14439         error when MCS is used on the MS runtime and we need to delay-sign 
14440         (which seems unsupported by AssemblyBuilder - see #56621).
14441
14442 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
14443
14444         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
14445         (TypeManager.ComputeNamespaces): Faster implementation for
14446         Microsoft runtime.
14447
14448         * compiler.csproj: Updated AssemblyName to mcs.
14449
14450 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
14451
14452         * rootcontext.cs: Add new types to the boot resolution.
14453
14454         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
14455         MulticastDelegate is not allowed.
14456
14457         * typemanager.cs: Add new types to lookup: System.TypedReference
14458         and ArgIterator.
14459
14460         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
14461         check for TypedReference or ArgIterator, they are not allowed. 
14462
14463         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
14464         makes us properly catch 1510 in some conditions (see bug 56016 for
14465         details). 
14466
14467 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
14468
14469         * CryptoConvert.cs: update from corlib version
14470         with endian fixes.
14471
14472 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
14473
14474         * class.cs (Indexer.Define): Check indexername declaration
14475
14476 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
14477
14478         * attribute.cs (IsClsCompliant): Fixed problem with handling
14479         all three states (compliant, not-compliant, undetected).
14480
14481 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
14482
14483         * attribute.cs (Attribute): Location is now public.
14484         (Resolve): Store resolved arguments (pos_values) in attribute class.
14485         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
14486         (GetClsCompliantAttributeValue): New method that gets
14487         CLSCompliantAttribute value.
14488         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
14489         if exists else null.
14490         (AttributeTester): New class for CLS-Compliant verification routines.
14491
14492         * class.cs (Emit): Add CLS-Compliant verification.
14493         (Method.GetSignatureForError): Implemented.
14494         (Constructor.GetSignatureForError): Implemented
14495         (Constructor.HasCompliantArgs): Returns if constructor has
14496         CLS-Compliant arguments.
14497         (Constructor.Emit): Override.
14498         (Construcor.IsIdentifierClsCompliant): New method; For constructors
14499         is needed to test only parameters.
14500         (FieldBase.GetSignatureForError): Implemented.
14501         (TypeContainer): New member for storing base interfaces.
14502         (TypeContainer.FindMembers): Search in base interfaces too.
14503
14504         * codegen.cs (GetClsComplianceAttribute): New method that gets
14505         assembly or module CLSCompliantAttribute value.
14506         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
14507         for assembly.
14508         (ModuleClass.Emit): Add error 3012 test.
14509
14510         * const.cs (Emit): Override and call base for CLS-Compliant tests.
14511
14512         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
14513         state for all decl types.
14514         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
14515         if CLS-Compliant tests are required.
14516         (IsClsCompliaceRequired): New method. Analyze whether code
14517         must be CLS-Compliant.
14518         (IsExposedFromAssembly): New method. Returns true when MemberCore
14519         is exposed from assembly.
14520         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
14521         value or gets cached value.
14522         (HasClsCompliantAttribute): New method. Returns true if MemberCore
14523         is explicitly marked with CLSCompliantAttribute.
14524         (IsIdentifierClsCompliant): New abstract method. This method is
14525         used to testing error 3005.
14526         (IsIdentifierAndParamClsCompliant): New method. Common helper method
14527         for identifier and parameters CLS-Compliant testing.
14528         (VerifyClsCompliance): New method. The main virtual method for
14529         CLS-Compliant verifications.
14530         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
14531         null. I don't know why is null (too many public members !).
14532         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
14533         and get value of first CLSCompliantAttribute that found.
14534
14535         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
14536         (VerifyClsCompliance): Override and add extra tests.
14537
14538         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
14539         clscheck- disable CLS-Compliant verification event if assembly is has
14540         CLSCompliantAttribute(true).
14541
14542         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
14543         ApllyAttribute is now called in emit section as in the other cases.
14544         Possible future Emit integration.
14545         (IsIdentifierClsCompliant): New override.
14546         (VerifyClsCompliance): New override.
14547         (GetEnumeratorName): Returns full enum name.
14548
14549         * parameter.cs (GetSignatureForError): Implemented.
14550
14551         * report.cs (WarningData): New struct for Warning message information.
14552         (LocationOfPreviousError): New method.
14553         (Warning): New method. Reports warning based on the warning table.
14554         (Error_T): New method. Reports error based on the error table.
14555
14556         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
14557         verifications are done here.
14558
14559         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
14560
14561         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
14562         CLSCompliantAttribute.
14563         (all_imported_types): New member holds all imported types from other
14564         assemblies.
14565         (LoadAllImportedTypes): New method fills static table with exported types
14566         from all referenced assemblies.
14567         (Modules): New property returns all assembly modules.
14568
14569 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
14570
14571         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
14572         throwing a parser error.
14573
14574         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
14575         which removes the hardcoded get_/set_ prefixes for properties, as
14576         IL allows for the properties to be named something else.  
14577
14578         Bug #56013
14579
14580         * expression.cs: Do not override operand before we know if it is
14581         non-null.  Fix 56207
14582
14583 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
14584
14585         * typemanager.cs: support for pinned variables.
14586
14587 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
14588
14589         * decl.cs, typemanager.cs: Avoid using an arraylist
14590         as a buffer if there is only one result set.
14591
14592 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
14593
14594         * expression.cs: Make sure you cant call a static method
14595         with an instance expression, bug #56174.
14596
14597 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
14598
14599         * class.cs (IsDuplicateImplementation): Improve error reporting to
14600         flag 663 (method only differs in parameter modifier).
14601
14602         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
14603         in preprocessor directives.
14604
14605         * location.cs (LookupFile): Allow for the empty path.
14606
14607         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
14608         better approach for some of that patch, but its failing with the
14609         CharSet enumeration.  For now try/catch will do.
14610
14611         * typemanager.cs: Do not crash if a struct does not have fields.
14612         Fixes 56150.
14613
14614 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
14615
14616         * expression.cs: cs0213, cant fix a fixed expression.
14617         fixes 50231.
14618
14619 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
14620
14621         * cs-parser.jay: detect invalid embeded statements gracefully.
14622         bug #51113.
14623
14624 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
14625
14626         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
14627         As a regex:
14628         s/
14629         the invocation type may not be a subclass of the tye of the item/
14630         The type of the item must be a subclass of the invocation item.
14631         /g
14632
14633         Fixes bug #50820.
14634
14635 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
14636
14637         * attribute.cs: Added methods to get a string and a bool from an
14638         attribute. Required to information from AssemblyKeyFileAttribute,
14639         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
14640         * codegen.cs: Modified AssemblyName creation to include support for
14641         strongnames. Catch additional exceptions to report them as CS1548.
14642         * compiler.csproj: Updated include CryptoConvert.cs.
14643         * compiler.csproj.user: Removed file - user specific configuration.
14644         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
14645         Mono.Security assembly. The original class is maintained and tested in
14646         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
14647         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
14648         like CSC 8.0 (C# v2) supports.
14649         * Makefile: Added CryptoConvert.cs to mcs sources.
14650         * rootcontext.cs: Added new options for strongnames.
14651
14652 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
14653
14654         * driver.cs: For --expect-error, report error code `2'
14655         if the program compiled with no errors, error code `1' if
14656         it compiled with an error other than the one expected.
14657
14658 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
14659
14660         * compiler.csproj: Updated for Visual Studio .NET 2003.
14661         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
14662         * compiler.sln: Updated for Visual Studio .NET 2003.
14663
14664 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
14665
14666         * expression.cs: Fix bug #47234. We basically need to apply the
14667         rule that we prefer the conversion of null to a reference type
14668         when faced with a conversion to 'object' (csc behaviour).
14669
14670 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14671
14672         * statement.cs: Shorter form for foreach, eliminates
14673         a local variable. r=Martin.
14674
14675 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14676
14677         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
14678         checks if we can use brtrue/brfalse to test for 0.
14679         * expression.cs: use the above in the test for using brtrue/brfalse.
14680         cleanup code a bit.
14681
14682 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14683
14684         * expression.cs: Rewrite string concat stuff. Benefits:
14685
14686         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
14687         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
14688         rather than a concat chain.
14689
14690         * typemanager.cs: Add lookups for more concat overloads.
14691
14692 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14693
14694         * expression.cs: Emit shorter il code for array init.
14695
14696         newarr
14697         dup
14698         // set 1
14699
14700         // set 2
14701
14702         newarr
14703         stloc.x
14704
14705         ldloc.x
14706         // set 1
14707
14708         ldloc.x
14709         // set 2
14710
14711 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
14712
14713         * statement.cs: Before, two switch blocks would be merged if the
14714         total size of the blocks (end_item - begin_item + 1) was less than
14715         two times the combined sizes of the blocks.
14716
14717         Now, it will only merge if after the merge at least half of the
14718         slots are filled.
14719
14720         fixes 55885.
14721
14722 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
14723
14724         * class.cs : csc build fix for GetMethods(). See bug #52503.
14725
14726 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
14727
14728         * expression.cs: Make sure fp comparisons work with NaN.
14729         This fixes bug #54303. Mig approved this patch a long
14730         time ago, but we were not able to test b/c the runtime
14731         had a related bug.
14732
14733 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
14734
14735         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
14736
14737 2004-03-19  Martin Baulig  <martin@ximian.com>
14738
14739         * class.cs (MemberCore.IsDuplicateImplementation): Report the
14740         error here and not in our caller.
14741
14742 2004-03-19  Martin Baulig  <martin@ximian.com>
14743
14744         * interface.cs: Completely killed this file.
14745         (Interface): We're now a TypeContainer and live in class.cs.
14746
14747         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
14748         argument; we're now also called for interfaces.
14749         (TypeContainer.DefineMembers): Allow this method being called
14750         multiple times.
14751         (TypeContainer.GetMethods): New public method; formerly known as
14752         Interface.GetMethod().  This is used by PendingImplementation.
14753         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
14754         it's now private and non-static.
14755         (Interface): Moved this here; it's now implemented similar to
14756         Class and Struct.
14757         (Method, Property, Event, Indexer): Added `bool is_interface'
14758         argument to their .ctor's.
14759         (MemberBase.IsInterface): New public field.
14760
14761         * cs-parser.jay: Create normal Method, Property, Event, Indexer
14762         instances instead of InterfaceMethod, InterfaceProperty, etc.
14763         (opt_interface_base): Removed; we now use `opt_class_base' instead.
14764         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
14765
14766 2004-03-19  Martin Baulig  <martin@ximian.com>
14767
14768         * class.cs (MethodCore.IsDuplicateImplementation): New private
14769         method which does the CS0111 checking.
14770         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
14771         Use IsDuplicateImplementation().
14772
14773 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
14774
14775         * decl.cs (FindMemberToOverride): New method to find the correct
14776         method or property to override in the base class.
14777         * class.cs
14778             - Make Method/Property use the above method to find the
14779               version in the base class.
14780             - Remove the InheritableMemberSignatureCompare as it is now
14781               dead code.
14782
14783         This patch makes large code bases much faster to compile, as it is
14784         O(n) rather than O(n^2) to do this validation.
14785
14786         Also, it fixes bug 52458 which is that nested classes are not
14787         taken into account when finding the base class member.
14788
14789         Reviewed/Approved by Martin.
14790
14791 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
14792
14793         * interface.cs: In all interface classes removed redundant
14794         member initialization.
14795
14796 2004-03-16  Martin Baulig  <martin@ximian.com>
14797
14798         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
14799
14800 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
14801
14802         * decl.cs (DefineTypeAndParents): New helper method to define a
14803         type's containers before the type itself is defined;  This is a
14804         bug exposed by the recent changes to Windows.Forms when an
14805         implemented interface was defined inside a class that had not been
14806         built yet.   
14807
14808         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
14809
14810         (Check): Loop correctly to report errors modifiers
14811         (UNSAFE was not in the loop, since it was the same as TOP).
14812
14813         * interface.cs: Every interface member now takes a ModFlags,
14814         instead of a "is_new" bool, which we set on the base MemberCore. 
14815
14816         Every place where we called "UnsafeOk" in the interface, now we
14817         call the proper member (InterfaceMethod.UnsafeOK) instead to get
14818         the unsafe settings from the member declaration instead of the
14819         container interface. 
14820
14821         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
14822
14823         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
14824         `set_indexer_name' to the pending bits (one per type).
14825
14826         We fixed a bug today that was picking the wrong method to
14827         override, since for properties the existing InterfaceMethod code
14828         basically ignored the method name.  Now we make sure that the
14829         method name is one of the valid indexer names.
14830
14831 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
14832  
14833         * support.cs (SeekableStreamReader): Keep track of stream byte
14834         positions and don't mix them with character offsets to the buffer.
14835
14836         Patch from Gustavo Giráldez
14837
14838 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
14839
14840         * interface.cs (InterfaceSetGetBase): Removed double member
14841         initialization, base class does it as well.
14842
14843 2004-03-13  Martin Baulig  <martin@ximian.com>
14844
14845         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
14846         when compiling corlib.
14847
14848 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
14849
14850         * convert.cs (ExplicitConversion): We were reporting an error on
14851         certain conversions (object_type source to a value type, when the
14852         expression was `null') before we had a chance to pass it through
14853         the user defined conversions.
14854
14855         * driver.cs: Replace / and \ in resource specifications to dots.
14856         Fixes 50752
14857
14858         * class.cs: Add check for duplicate operators.  Fixes 52477
14859
14860 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
14861
14862         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
14863         that are in the middle of the statements, not only at the end.
14864         Fixes #54987
14865
14866         * class.cs (TypeContainer.AddField): No longer set the
14867         `HaveStaticConstructor' flag, now we call it
14868         `UserDefineStaticConstructor' to diferentiate the slightly
14869         semantic difference.
14870
14871         The situation is that we were not adding BeforeFieldInit (from
14872         Modifiers.TypeAttr) to classes that could have it.
14873         BeforeFieldInit should be set to classes that have no static
14874         constructor. 
14875
14876         See:
14877
14878         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
14879
14880         And most importantly Zoltan's comment:
14881
14882         http://bugzilla.ximian.com/show_bug.cgi?id=44229
14883
14884         "I think beforefieldinit means 'it's ok to initialize the type sometime 
14885          before its static fields are used', i.e. initialization does not need
14886          to be triggered by the first access to the type. Setting this flag
14887          helps the JIT to compile better code, since it can run the static
14888          constructor at JIT time, and does not need to generate code to call it
14889          (possibly lots of times) at runtime. Unfortunately, mcs does not set
14890          this flag for lots of classes like String. 
14891          
14892          csc sets this flag if the type does not have an explicit static 
14893          constructor. The reasoning seems to be that if there are only static
14894          initalizers for a type, and no static constructor, then the programmer
14895          does not care when this initialization happens, so beforefieldinit
14896          can be used.
14897          
14898          This bug prevents the AOT compiler from being usable, since it 
14899          generates so many calls to mono_runtime_class_init that the AOT code
14900          is much slower than the JITted code. The JITted code is faster, 
14901          because it does not generate these calls if the vtable is type is
14902          already initialized, which is true in the majority of cases. But the
14903          AOT compiler can't do this."
14904
14905 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
14906
14907         * class.cs (MethodData.Emit): Refactor the code so symbolic
14908         information is generated for destructors;  For some reasons we
14909         were taking a code path that did not generate symbolic information
14910         before. 
14911
14912 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
14913
14914         * class.cs: Create a Constructor.CheckBase method that
14915         takes care of all validation type code. The method
14916         contains some code that was moved from Define.
14917
14918         It also includes new code that checks for duplicate ctors.
14919         This fixes bug #55148.
14920
14921 2004-03-09  Joshua Tauberer <tauberer@for.net>
14922
14923         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
14924         a { ... }-style array creation invokes EmitStaticInitializers
14925         which is not good for reference-type arrays.  String, decimal
14926         and now null constants (NullCast) are not counted toward
14927         static initializers.
14928
14929 2004-03-05  Martin Baulig  <martin@ximian.com>
14930
14931         * location.cs (SourceFile.HasLineDirective): New public field;
14932         specifies whether the file contains or is referenced by a "#line"
14933         directive.
14934         (Location.DefineSymbolDocuments): Ignore source files which
14935         either contain or are referenced by a "#line" directive.        
14936
14937 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
14938
14939         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
14940         direct access to our parent, so check the method inline there.
14941
14942 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
14943
14944         * expression.cs (Invocation.EmitCall): Miguel's last commit
14945         caused a regression. If you had:
14946
14947             T t = null;
14948             t.Foo ();
14949
14950         In Foo the implict this would be null.
14951
14952 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
14953
14954         * expression.cs (Invocation.EmitCall): If the method is not
14955         virtual, do not emit a CallVirt to it, use Call.
14956
14957         * typemanager.cs (GetFullNameSignature): Improve the method to
14958         cope with ".ctor" and replace it with the type name.
14959
14960         * class.cs (ConstructorInitializer.Resolve): Now the method takes
14961         as an argument the ConstructorBuilder where it is being defined,
14962         to catch the recursive constructor invocations.
14963
14964 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
14965
14966         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
14967         routines to check if a type is an enumerable/enumerator allow
14968         classes that implement the IEnumerable or IEnumerator interfaces.
14969
14970         * class.cs (Property, Operator): Implement IIteratorContainer, and
14971         implement SetYields.
14972
14973         (Property.Define): Do the block swapping for get_methods in the
14974         context of iterators.   We need to check if Properties also
14975         include indexers or not.
14976
14977         (Operator): Assign the Block before invoking the
14978         OperatorMethod.Define, so we can trigger the Iterator code
14979         replacement. 
14980
14981         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
14982         Property and Operator classes are not created when we parse the
14983         declarator but until we have the block completed, so we use a
14984         singleton SimpleIteratorContainer.Simple to flag whether the
14985         SetYields has been invoked.
14986
14987         We propagate this setting then to the Property or the Operator to
14988         allow the `yield' to function.
14989
14990 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
14991
14992         * codegen.cs: Implemented attribute support for modules.
14993         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
14994         Assembly/Module functionality.
14995
14996         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
14997         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
14998         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
14999
15000 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
15001
15002         * interface.cs (FindMembers): The operation is performed on all base
15003         interfaces and not only on the first. It is required for future CLS Compliance patch.
15004
15005 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
15006
15007         * statement.cs, codegen.cs:
15008         This patch deals with patterns such as:
15009
15010         public class List : IEnumerable {
15011
15012                 public MyEnumerator GetEnumerator () {
15013                         return new MyEnumerator(this);
15014                 }
15015
15016                 IEnumerator IEnumerable.GetEnumerator () {
15017                         ...
15018                 }
15019                 
15020                 public struct MyEnumerator : IEnumerator {
15021                         ...
15022                 }
15023         }
15024
15025         Before, there were a few things we did wrong:
15026         1) we would emit callvirt on a struct, which is illegal
15027         2) we emited ldarg when we needed to emit ldarga
15028         3) we would mistakenly call the interface methods on an enumerator
15029         type that derived from IEnumerator and was in another assembly. For example:
15030
15031         public class MyEnumerator : IEnumerator
15032
15033         Would have the interface methods called, even if there were public impls of the
15034         method. In a struct, this lead to invalid IL code.
15035
15036 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
15037
15038         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
15039           renamed to Emit.
15040
15041         * delegate.cs (Define): Fixed crash when delegate type is undefined.
15042
15043 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
15044
15045         * cs-parser.jay: Fix small regression: we were not testing V2
15046         compiler features correctly.
15047
15048         * interface.cs: If the emit context is null, then create one
15049
15050 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
15051
15052         * decl.cs (GetSignatureForError): New virtual method to get full name
15053           for error messages.
15054
15055         * attribute.cs (IAttributeSupport): New interface for attribute setting.
15056           Now it is possible to rewrite ApplyAttributes method to be less if/else.
15057
15058         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
15059           Duplicated members and code in these classes has been removed.
15060           Better encapsulation in these classes.
15061
15062 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
15063
15064         * assign.cs (Assign.DoResolve): When dealing with compound
15065         assignments, there is a new rule in ECMA C# 2.4 (might have been
15066         there before, but it is documented here) that states that in:
15067
15068         a op= b;
15069
15070         If b is of type int, and the `op' is a shift-operator, then the
15071         above is evaluated as:
15072
15073         a = (int) a op b 
15074
15075         * expression.cs (Binary.ResolveOperator): Instead of testing for
15076         int/uint/long/ulong, try to implicitly convert to any of those
15077         types and use that in pointer arithmetic.
15078
15079         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
15080         method to print information for from the type, not from the
15081         null-method we were given.
15082
15083 2004-02-01  Duncan Mak  <duncan@ximian.com>
15084
15085         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
15086         parsing for cmd, fixes bug #53694.
15087
15088 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
15089
15090         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
15091         in the member name duplication tests. Property and operator name duplication
15092         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
15093
15094 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
15095
15096         * interface.cs (PopulateMethod): Fixed crash when interface method
15097         returns not existing type (error test cs0246-3.cs).
15098
15099 2004-02-02  Ravi Pratap M <ravi@ximian.com>
15100
15101         * cs-parser.jay (interface_accessors): Re-write actions to also
15102         store attributes attached to get and set methods. Fix spelling
15103         while at it.
15104
15105         (inteface_property_declaration): Modify accordingly.
15106
15107         (InterfaceAccessorInfo): New helper class to store information to pass
15108         around between rules that use interface_accessors.
15109
15110         * interface.cs (Emit): Apply attributes on the get and set
15111         accessors of properties and indexers too.
15112
15113         * attribute.cs (ApplyAttributes): Modify accordingly to use the
15114         right MethodBuilder when applying attributes to the get and set accessors.
15115
15116 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
15117
15118         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
15119
15120 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
15121
15122         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
15123
15124 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
15125
15126         * cs-parser.jay: Remove YIELD token, instead use the new grammar
15127         changes that treat `yield' specially when present before `break'
15128         or `return' tokens.
15129
15130         * cs-tokenizer.cs: yield is no longer a keyword.
15131
15132 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
15133
15134         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
15135         setting for default constructors.
15136         For default constructors are almost every time set wrong Modifier. The
15137         generated IL code has been alright. But inside mcs this values was
15138         wrong and this was reason why several of my CLS Compliance tests
15139         failed.
15140
15141 2004-01-22  Martin Baulig  <martin@ximian.com>
15142
15143         * cs-parser.jay (namespace_or_type_name): Return an Expression,
15144         not a QualifiedIdentifier.  This is what `type_name_expression'
15145         was previously doing.
15146         (type_name_expression): Removed; the code is now in
15147         `namespace_or_type_name'.
15148         (qualified_identifier): Removed, use `namespace_or_type_name'
15149         instead.
15150         (QualifiedIdentifier): Removed this class.      
15151
15152 2004-01-22  Martin Baulig  <martin@ximian.com>
15153
15154         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
15155         not a string as alias name.
15156
15157 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
15158
15159         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
15160         #52730 bug, and instead compute correctly the need to use a
15161         temporary variable when requesting an address based on the
15162         static/instace modified of the field and the constructor.
15163  
15164 2004-01-21  Martin Baulig  <martin@ximian.com>
15165
15166         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
15167         class and namespace before looking up aliases.  Fixes #52517.
15168
15169 2004-01-21  Martin Baulig  <martin@ximian.com>
15170
15171         * flowanalysis.cs (UsageVector.Merge): Allow variables being
15172         assinged in a 'try'; fixes exception4.cs.
15173
15174 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
15175         * class.cs : Implemented parameter-less constructor for TypeContainer
15176
15177         * decl.cs: Attributes are now stored here. New property OptAttributes
15178
15179         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
15180
15181         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
15182
15183 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
15184
15185         * typemanager.cs (CSharpSignature): Now reports also inner class name.
15186           (CSharpSignature): New method for indexer and property signature.
15187
15188 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
15189
15190         * pending.cs (IsVirtualFilter): Faster implementation.
15191
15192 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
15193
15194         * typemanager.cs: Avoid inclusion of same assembly more than once.
15195
15196 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
15197
15198         * cs-parser.jay: Fixed problem where the last assembly attribute
15199           has been applied also to following declaration (class, struct, etc.)
15200           
15201 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
15202
15203         * class.cs: Added error CS0538, CS0539 reporting.
15204         Fixed crash on Microsoft runtime when field type is void.
15205
15206         * cs-parser.jay: Added error CS0537 reporting.
15207
15208         * pending.cs: Added error CS0535 reporting.
15209         Improved error report for errors CS0536, CS0534.
15210
15211 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
15212
15213         Merge a few bits from the Anonymous Method MCS tree.
15214
15215         * statement.cs (ToplevelBlock): New class for toplevel methods,
15216         will hold anonymous methods, lifted variables.
15217
15218         * cs-parser.jay: Create toplevel blocks for delegates and for
15219         regular blocks of code. 
15220
15221 2004-01-20  Martin Baulig  <martin@ximian.com>
15222
15223         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
15224         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
15225         and `NeedExplicitReturn'; added `IsLastStatement'.
15226         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
15227         have a `ReturnLabel' or we're not unreachable.
15228
15229         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
15230         child's reachability; don't just override ours with it.  Fixes
15231         #58058 (lluis's example).
15232         (FlowBranching): Added public InTryOrCatch(), InCatch(),
15233         InFinally(), InLoop(), InSwitch() and
15234         BreakCrossesTryCatchBoundary() methods.
15235
15236         * statement.cs (Return): Do all error checking in Resolve().
15237         Unless we are the last statement in a top-level block, always
15238         create a return label and jump to it.
15239         (Break, Continue): Do all error checking in Resolve(); also make
15240         sure we aren't leaving a `finally'.
15241         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
15242         statement in a top-level block.
15243         (Block.Flags): Added `IsDestructor'.
15244         (Block.IsDestructor): New public property.
15245
15246 2004-01-20  Martin Baulig  <martin@ximian.com>
15247
15248         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
15249
15250 2004-01-20  Martin Baulig  <martin@ximian.com>
15251
15252         * statement.cs (Statement.ResolveUnreachable): New public method.
15253         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
15254         (Block.Resolve): Resolve unreachable statements.
15255
15256 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
15257
15258         * expression.cs: We need to fix the case where we do
15259         not have a temp variable here.
15260
15261         * assign.cs: Only expression compound assignments need
15262         temporary variables.
15263
15264 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
15265
15266         * flowanalysis.cs: Reduce memory allocation in a few ways:
15267           - A block with no variables should not allocate a bit
15268             vector for itself.
15269           - A method with no out parameters does not need any tracking
15270             for assignment of the parameters, so we need not allocate
15271             any data for it.
15272           - The arrays:
15273                 public readonly Type[] VariableTypes;
15274                 public readonly string[] VariableNames;
15275             Are redundant. The data is already stored in the variable
15276             map, so we need not allocate another array for it.
15277           - We need to add alot of checks for if (params | locals) == null
15278             due to the first two changes.
15279
15280 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
15281
15282         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
15283         implement IMemoryLocation, we store a copy on a local variable and
15284         take the address of it.  Patch from Benjamin Jemlich
15285
15286         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
15287         to use a special "type_name_expression" rule which reduces the
15288         number of "QualifiedIdentifier" classes created, and instead
15289         directly creates MemberAccess expressions.
15290
15291 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
15292
15293         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
15294         that fixes #52853.  Null literal assignment to ValueType
15295
15296         * class.cs (MethodData.Emit): Instead of checking the name of the
15297         method to determine if its a destructor, create a new derived
15298         class from Method called Destructor, and test for that.  
15299
15300         * cs-parser.jay: Create a Destructor object instead of a Method.  
15301
15302         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
15303
15304         Fixes: 52933
15305
15306 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
15307
15308         * expression.cs (Binary.ResolveOperator): Perform an implicit
15309         conversion from MethodGroups to their delegate types on the
15310         Addition operation.
15311
15312         * delegate.cs: Introduce a new class DelegateCreation that is the
15313         base class for `NewDelegate' and `ImplicitDelegateCreation',
15314         factor some code in here.
15315
15316         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
15317         conversion from MethodGroups to compatible delegate types. 
15318
15319         * ecore.cs (Expression.Resolve): Do not flag error 654
15320         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
15321         we allow conversions from MethodGroups to delegate types now.
15322
15323         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
15324         assignments in v2 either.
15325
15326 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
15327
15328         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
15329         static read-only fields in ctors.
15330
15331         Applied patch from Benjamin Jemlich 
15332
15333         * expression.cs (UnaryMutator): Avoid leaking local variables. 
15334
15335 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
15336
15337         * cs-tokenizer.cs (IsCastToken): Allow the various native types
15338         here to return true, as they can be used like this:
15339
15340                 (XXX) int.MEMBER ()
15341
15342         Fixed 49836 and all the other dups
15343
15344 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
15345
15346         * driver.cs: Implement /win32res and /win32icon.
15347
15348 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
15349
15350         * cs-parser.jay: Add a rule to improve error handling for the
15351         common mistake of placing modifiers after the type.
15352
15353 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
15354
15355         * cs-parser.jay (interface_event_declaration): Catch
15356         initialization of events on interfaces, and report cs0068
15357
15358         * cs-parser.jay (interface_event_declaration): Catch
15359         initialization of events. 
15360
15361         * ecore.cs: Better report missing constructors.
15362
15363         * expression.cs (Binary.ResolveOperator): My previous bug fix had
15364         the error reporting done in the wrong place.  Fix.
15365
15366         * expression.cs (Binary.ResolveOperator): Catch the 
15367         operator + (E x, E y) error earlier, and later allow for implicit
15368         conversions in operator +/- (E e, U x) from U to the underlying
15369         type of E.
15370
15371         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
15372         52596, if the container class is abstract, the default constructor
15373         is protected otherwise its public (before, we were always public).
15374
15375         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
15376         fixed statement.
15377
15378         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
15379         Jemlich that fixes bug #52597, MCS was generating invalid code for
15380         idisposable structs.   Thanks to Ben for following up with this
15381         bug as well.
15382
15383 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
15384
15385         * driver.cs: Allow assemblies without code to be generated, fixes
15386         52230.
15387
15388 2004-01-07  Nick Drochak <ndrochak@gol.com>
15389
15390         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
15391
15392 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
15393
15394         * cs-parser.jay: Add rules to improve error reporting if fields or
15395         methods are declared at the namespace level (error 116)
15396
15397         * Add rules to catch event add/remove
15398
15399 2004-01-04  David Sheldon <dave-mono@earth.li>
15400
15401   * expression.cs: Added matching ")" to error message for 
15402   CS0077
15403
15404 2004-01-03 Todd Berman <tberman@gentoo.org>
15405
15406         * ecore.cs, attribute.cs:
15407         Applying fix from #52429.
15408
15409 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
15410
15411         * ecore.cs, expression.cs, statement.cs:
15412         Total rewrite of how we handle branching. We
15413         now handle complex boolean expressions with fewer
15414         jumps. As well if (x == 0) no longer emits a ceq.
15415
15416         if (x is Foo) is much faster now, because we generate
15417         better code.
15418
15419         Overall, we get a pretty big improvement on our benchmark
15420         tests. The code we generate is smaller and more readable.
15421
15422         I did a full two-stage bootstrap. The patch was reviewed
15423         by Martin and Miguel.
15424
15425 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
15426
15427         * cs-parser.jay: Make primary_expression not take a QI.
15428         we dont need this because the member_access rule covers
15429         us here. So we replace the rule with just IDENTIFIER.
15430
15431         This has two good effects. First, we remove a s/r conflict.
15432         Second, we allocate many fewer QualifiedIdentifier objects.
15433
15434 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
15435
15436         * attribute.cs: Handle MarshalAs attributes as pseudo, and
15437         set the correct information via SRE. This prevents
15438         hanging on the MS runtime. Fixes #29374.
15439
15440 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
15441
15442         * convert.cs: correctly handle conversions to value types
15443         from Enum and ValueType as unboxing conversions.
15444
15445         Fixes bug #52569. Patch by Benjamin Jemlich.
15446
15447 2004-01-02  Ravi Pratap  <ravi@ximian.com>
15448
15449         * expression.cs (BetterConversion): Prefer int -> uint
15450         over int -> ulong (csc's behaviour). This fixed bug #52046.
15451
15452 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
15453
15454         * decl.cs (MemberCache.FindMembers): now returns a
15455         MemberInfo [].
15456
15457         * typemanager.cs: In general, go with with ^^.
15458         (CopyNewMethods): take an IList.
15459         (RealMemberLookup): Only allocate an arraylist
15460         if we copy from two sets of methods.
15461
15462         This change basically does two things:
15463         1) Fewer array lists allocated due to CopyNewMethods.
15464         2) the explicit cast in MemberList costed ALOT.
15465
15466 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
15467
15468         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
15469         a hashtable to avoid needless string allocations when an identifier is
15470         used more than once (the common case).
15471
15472 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
15473
15474         * pending.cs: MS's TypeBuilder.GetInterfaces ()
15475         is broken, it will not return anything. So, we
15476         have to use the information we have in mcs to
15477         do the task.
15478
15479         * typemanager.cs: Add a cache for GetInterfaces,
15480         since this will now be used more often (due to ^^)
15481
15482         (GetExplicitInterfaces) New method that gets the
15483         declared, not effective, interfaces on a type
15484         builder (eg, if you have interface IFoo, interface
15485         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
15486         { IBar }.
15487
15488         This patch makes MCS able to bootstrap itself on
15489         Windows again.
15490
15491 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
15492
15493         * expression.cs: Remove the Nop's that Miguel put
15494         in by mistake.
15495
15496 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
15497
15498         * report.cs, codegen.cs: Give the real stack trace to
15499         the error when an exception is thrown.
15500
15501 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
15502
15503         * decl.cs: only allocate hashtables for ifaces if 
15504         it is an iface!
15505
15506 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
15507
15508         * expression.cs: fix the error from cs0121-2.cs
15509         (a parent interface has two child interfaces that
15510         have a function with the same name and 0 params
15511         and the function is called through the parent).
15512
15513 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
15514
15515         * class.cs, rootcontext.cs, typmanager.cs: do not
15516         leak pointers.
15517
15518 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
15519
15520         * codegen.cs: remove stack for the ec flow branching.
15521         It is already a linked list, so no need.
15522
15523 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
15524
15525         * Makefile: Allow custom profiler here.
15526
15527 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
15528
15529         * typemanager.cs (LookupType):
15530           - Use a static char [], because split takes
15531             a param array for args, so it was allocating
15532             every time.
15533           - Do not store true in a hashtable, it boxes.
15534
15535 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
15536
15537         * flowanalysis.cs: bytify common enums.
15538
15539 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
15540
15541         * modifiers.cs: Add a new set of flags for the
15542         flags allowed on explicit interface impls.
15543         * cs-parser.jay: catch the use of modifiers in
15544         interfaces correctly.
15545         * class.cs: catch private void IFoo.Blah ().
15546
15547         All related to bug #50572.
15548
15549 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
15550
15551         * decl.cs: Rewrite the consistant accessability checking.
15552         Accessability is not linear, it must be implemented in
15553         a tableish way. Fixes #49704.
15554
15555 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
15556
15557         * expression.cs: Handle negation in a checked context.
15558         We must use subtraction from zero. Fixes #38674.
15559
15560 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
15561
15562         * class.cs: Ignore static void main in DLLs.
15563         * rootcontext.cs: Handle the target type here,
15564         since we are have to access it from class.cs
15565         * driver.cs: account for the above.
15566
15567 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
15568
15569         * report.cs: Give line numbers and files if available.
15570
15571 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
15572
15573         * driver.cs: Implement /addmodule.
15574
15575         * typemanager.cs:  Change 'modules' field so it now contains Modules not
15576         ModuleBuilders.
15577
15578 2003-12-20  Martin Baulig  <martin@ximian.com>
15579
15580         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
15581         (FieldBase.IsAssigned): Removed this field.
15582         (FieldBase.SetAssigned): New public method.
15583         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
15584
15585 2003-12-20  Martin Baulig  <martin@ximian.com>
15586
15587         * expression.cs (LocalVariableReference.DoResolve): Don't set
15588         `vi.Used' if we're called from DoResolveLValue().
15589
15590         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
15591         returns the usage vector it just merged into the current one -
15592         pass this one to UsageWarning().
15593         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
15594         of the `EmitContext', don't call this recursively on our children.
15595
15596 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
15597
15598         * driver.cs: Implement /target:module.
15599
15600 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
15601
15602         * support.cs (CharArrayHashtable): New helper class.
15603
15604         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
15605         char arrays, not strings, so we can avoid creating a string in
15606         consume_identifier if the identifier is a keyword.
15607
15608 2003-12-16  Martin Baulig  <martin@ximian.com>
15609
15610         * statement.cs (LocalInfo.Assigned): Removed this property.
15611         (LocalInfo.Flags): Removed `Assigned'.
15612         (LocalInfo.IsAssigned): New public method; takes the EmitContext
15613         and uses flow analysis.
15614         (Block.UsageWarning): Made this method private.
15615         (Block.Resolve): Call UsageWarning() if appropriate.
15616
15617         * expression.cs (LocalVariableReference.DoResolve): Always set
15618         LocalInfo.Used here.
15619
15620 2003-12-13  Martin Baulig  <martin@ximian.com>
15621
15622         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
15623         any value here; we're now using flow analysis to figure out
15624         whether a statement/block returns a value.
15625
15626 2003-12-13  Martin Baulig  <martin@ximian.com>
15627
15628         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
15629         working again.
15630         (FlowBranching.MergeFinally): Don't call
15631         `branching.CheckOutParameters()' here, this is called in
15632         MergeTopBlock().
15633         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
15634         when adding the `finally' vector.       
15635
15636 2003-12-13  Martin Baulig  <martin@ximian.com>
15637
15638         * flowanalysis.cs
15639         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
15640         actually work and also fix #48962.
15641
15642 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
15643
15644         * decl.cs: Do not check System.Object for nested types,
15645         since we know it does not have any. Big bang for buck:
15646
15647         BEFORE:
15648            Run 1:   8.35 seconds
15649            Run 2:   8.32 seconds
15650            corlib:  17.99 seconds
15651         AFTER:
15652            Run 1:   8.17 seconds
15653            Run 2:   8.17 seconds
15654            corlib:  17.39 seconds
15655
15656 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
15657
15658         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
15659         time we are returning 0 members, so we save alot here.
15660
15661 2003-12-11  Martin Baulig  <martin@ximian.com>
15662
15663         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
15664         `MergeChild()', also just take the `FlowBranching' as argument;
15665         call Merge() on it and return the result.
15666         (FlowBranching.Merge): We don't need to do anything if we just
15667         have one sibling.
15668
15669 2003-12-11  Martin Baulig  <martin@ximian.com>
15670
15671         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
15672         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
15673         Maurer for this idea.
15674
15675 2003-12-11  Martin Baulig  <martin@ximian.com>
15676
15677         * flowanalysis.cs (MergeResult): This class is now gone; we now
15678         use the `UsageVector' for this.  The reason for this is that if a
15679         branching just has one sibling, we don't need to "merge" them at
15680         all - that's the next step to do.
15681         (FlowBranching.Merge): We now return a `UsageVector' instead of a
15682         `MergeResult'.
15683
15684 2003-12-11  Martin Baulig  <martin@ximian.com>
15685
15686         Reworked flow analyis and made it more precise and bug-free.  The
15687         most important change is that we're now using a special `Reachability'
15688         class instead of having "magic" meanings of `FlowReturns'.  I'll
15689         do some more cleanups and optimizations and also add some more
15690         documentation this week.
15691
15692         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
15693         largely reworked this class.
15694         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
15695         the new `Reachability' class instead of having "magic" values here.
15696         (FlowBranching): We're now using an instance of `Reachability'
15697         instead of having separate `Returns', `Breaks' etc. fields.
15698
15699         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
15700         based on flow analysis; ignore the return value of block.Emit ().
15701
15702 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
15703
15704         * driver.cs typemanager.cs: Find the mono extensions to corlib even
15705         if they are private.
15706
15707 2003-12-09  Martin Baulig  <martin@ximian.com>
15708
15709         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
15710         call them directly on the UsageVector.
15711
15712 2003-12-09  Martin Baulig  <martin@ximian.com>
15713
15714         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
15715         Changed return type from `FlowReturns' to `Reachability'.
15716
15717 2003-12-09  Martin Baulig  <martin@ximian.com>
15718
15719         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
15720         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
15721         `Reachable' fields with a single `Reachability' one.
15722
15723 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15724
15725         * class.cs (FindMembers): Remove foreach's.
15726
15727         Bootstrap times:
15728
15729         BEFORE
15730                 Run 1:   8.74 seconds
15731                 Run 2:   8.71 seconds
15732
15733         AFTER
15734                 Run 1:   8.64 seconds
15735                 Run 2:   8.58 seconds
15736
15737
15738 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15739
15740         * cs-parser.jay:
15741         * gen-treedump.cs:
15742         * statement.cs:
15743         This patch does a few things:
15744                 1. EmptyStatement is now a singleton, so it is never reallocated.
15745                 2. All blah is EmptyStatement constructs have been changed to
15746                    blah == EmptyStatement.Value, which is much faster and valid
15747                    now that EmptyStatement is a singleton.
15748                 3. When resolving a block, rather than allocating a new array for
15749                    the non-empty statements, empty statements are replaced with
15750                    EmptyStatement.Value
15751                 4. Some recursive functions have been made non-recursive.
15752         Mainly the performance impact is from (3), however (1) and (2) are needed for
15753         this to work. (4) does not make a big difference in normal situations, however
15754         it makes the profile look saner.
15755
15756         Bootstrap times:
15757
15758         BEFORE
15759         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
15760         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
15761         Total memory allocated: 56397 KB
15762
15763         AFTER
15764         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
15765         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
15766         Total memory allocated: 55666 KB
15767
15768 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15769
15770         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
15771         than the hashtable in a hashtable version
15772
15773         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
15774         we always end up concating a string. This results in a huge perf
15775         loss, because many strings have to be tracked by the GC. In this
15776         patch, we first use a hashtable that works with two keys, so that
15777         the strings do not need to be concat'ed.
15778
15779         Bootstrap times:
15780         BEFORE
15781                 Run 1:   8.74 seconds
15782                 Run 2:   8.71 seconds
15783
15784         AFTER
15785                 Run 1:   8.65 seconds
15786                 Run 2:   8.56 seconds
15787
15788 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15789
15790         * Makefile: Add a new target `do-time' that does a quick and simple
15791         profile, leaving easy to parse output.
15792
15793 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
15794
15795         * codegen.cs (Init): Create the dynamic assembly with 
15796         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
15797
15798 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
15799
15800         * support.cs: Make the PtrHashtable use only one
15801         instance of its comparer.
15802
15803 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
15804
15805         * typemanager.cs: Fix lookup of GetNamespaces.
15806
15807 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
15808
15809         * expression.cs: Removed redundant line.
15810
15811         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
15812         ArrayLists, use for loops with bounds.  
15813
15814         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
15815         arraylist.
15816
15817         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
15818         arraylists, use for loop with bounds.
15819
15820         The above three changes give us a 0.071 second performance
15821         improvement out of 3.294 seconds down to 3.223.  On my machine
15822         the above changes reduced the memory usage by 1,387 KB during
15823         compiler bootstrap.
15824
15825         * cs-parser.jay (QualifiedIdentifier): New class used to represent
15826         QualifiedIdentifiers.  Before we created a new string through
15827         concatenation, and mostly later on, the result would be
15828         manipulated by DecomposeQI through string manipulation.
15829
15830         This reduced the compiler memory usage for bootstrapping from
15831         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
15832         compile times in 0.05 seconds.
15833
15834 2003-11-28  Dick Porter  <dick@ximian.com>
15835
15836         * support.cs: Do string compares with the Invariant culture.
15837
15838         * rootcontext.cs: 
15839         * gen-treedump.cs: 
15840         * expression.cs: 
15841         * driver.cs: 
15842         * decl.cs: 
15843         * codegen.cs: 
15844         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
15845         the comparison is done with the Invariant culture.
15846
15847 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
15848
15849         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
15850         GetEnumerator method.
15851
15852         (ProbeCollectionType): Iterate starting at the most specific type
15853         upwards looking for a GetEnumerator
15854
15855         * expression.cs: Shift count can be up to 31 for int/uint and 63
15856         for long/ulong.
15857
15858 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
15859
15860         * statement.cs (Block.LookupLabel): Also look for the label on the
15861         children blocks.  Use a hash table to keep track of visited
15862         nodes. 
15863
15864         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
15865         we actually did transform the other operand, otherwise fall back
15866         to the common codepath that casts to long.
15867
15868         * cs-tokenizer.cs: Use the same code pattern as the int case.
15869         Maybe I should do the parsing myself, and avoid depending on the
15870         Parse routines to get this done.
15871
15872 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
15873
15874         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
15875         which fixes bug 51347.  This time test it.
15876
15877         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
15878         attributes for example can not tell the difference between these.
15879         The difference was only a syntax feature of the language. 
15880
15881         * attribute.cs: Apply attributes to delegates.
15882
15883         * delegate.cs: Call the apply attributes method.
15884
15885 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
15886
15887         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
15888         comparing 0 vs Byte.MinValue, not the value
15889
15890         (ImplicitConversionRequired): When reporting a conversion error,
15891         use error 31 to print out the constant error instead of the
15892         simpler 29.
15893
15894         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
15895         which fixes bug 51347.
15896
15897 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
15898
15899         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
15900         which fixes the -warnaserror command line option.
15901
15902 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
15903
15904         * cfold.cs (DoNumericPromotions): During constant folding of
15905         additions on UIntConstant, special case intconstants with
15906         IntConstants like we do on the expression binary operator. 
15907
15908 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
15909
15910         * convert.cs (ImplicitReferenceConversion): We were missing a case
15911         (System.Enum are not value types or class types, so we need to
15912         classify them separatedly).
15913
15914         * driver.cs: We do not support error 2007.
15915
15916 2003-11-12 Jackson Harper <jackson@ximian.com>
15917
15918         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
15919         system directory. Also use the full file name so users can
15920         libraries names mscorlib-o-tron.dll in a non system dir.
15921
15922 2003-11-10  Martin Baulig  <martin@ximian.com>
15923
15924         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
15925         (TypeManager.InitCoreTypes): Initialize them here, but instead of
15926         calling `ResolveType()' on them, directly assign their `Type'.
15927
15928 2003-11-08  Martin Baulig  <martin@ximian.com>
15929
15930         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
15931         return value and the `out parent' parameter.
15932         (TypeContainer.DefineType): Moved the CS0644 check into
15933         GetClassBases().  Don't pass the interface types to the
15934         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
15935         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
15936
15937         * ecore.cs (TypeExpr.IsAttribute): New property.
15938         (TypeExpr.GetInterfaces): New method.
15939
15940         * interface.cs (Interface.GetInterfaceTypeByName): Return a
15941         TypeExpr instead of a Type.
15942         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
15943         (Interface.DefineType): Don't pass the interface types to the
15944         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
15945         them later and then call `TypeBulider.AddInterfaceImplementation()'.
15946
15947         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
15948         instead of a `Type[]'.
15949         (TypeManager.RegisterBuilder): Likewise.
15950         (TypeManager.AddUserInterface): Likewise.
15951         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
15952         `Type[]' and also return a `TypeExpr[]'.
15953         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
15954
15955 2003-11-08  Martin Baulig  <martin@ximian.com>
15956
15957         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
15958         Expression.     
15959
15960 2003-11-08  Martin Baulig  <martin@ximian.com>
15961
15962         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
15963         TypeManager.ResolveExpressionTypes().
15964
15965         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
15966         instead of an Expression.
15967         (TypeExpr): This is now an abstract base class for `TypeExpression'.
15968         (TypeExpression): New public class; formerly known as `TypeExpr'.
15969
15970         * expression.cs (ComposedCast): Derive from TypeExpr.
15971
15972         * typemanager.cs (TypeManager.system_*_expr): These are now
15973         TypExpr's instead of Expression's.
15974         (TypeManager.ResolveExpressionTypes): New public static function;
15975         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
15976         of them.        
15977
15978 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
15979
15980         * expression.cs (New.DoResolve): Do not dereference value that
15981         might be a null return.
15982
15983         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
15984         sure that the constant value has the right type.  Fixes an
15985         unreported bug, similar to 50425.
15986
15987         * const.cs (Const.LookupConstantValue): Call
15988         ImplicitStandardConversionExists before doing a conversion to
15989         avoid havng the TypeManager.ChangeType do conversions.
15990
15991         Reduced the number of casts used
15992
15993         (Const.ChangeType): New routine to enable reuse of the constant
15994         type changing code from statement.
15995
15996         * typemanager.cs (ChangeType): Move common initialization to
15997         static global variables.
15998
15999         Fixes #50425.
16000
16001         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
16002         every value type to go through, even if it was void.  Fix that. 
16003
16004         * cs-tokenizer.cs: Use is_identifier_start_character on the start
16005         character of the define, and the is_identifier_part_character for
16006         the rest of the string.
16007
16008 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
16009
16010         * expression.cs (UnaryMutator.EmitCode): When I updated
16011         LocalVariableReference.DoResolve, I overdid it, and dropped an
16012         optimization done on local variable references.
16013
16014 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
16015
16016         * ecore.cs: Convert the return from Ldlen into an int.
16017
16018 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
16019
16020         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
16021         the accessibility, this is a special case for toplevel non-public
16022         classes (internal for instance).
16023
16024 2003-10-20  Nick Drochak <ndrochak@gol.com>
16025
16026         * ecore.cs: Fix typo and build.  Needed another right paren.
16027
16028 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
16029
16030         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
16031         `internal' case regular and protected, but not allowing protected
16032         to be evaluated later.  Bug 49840
16033
16034 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
16035
16036         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
16037         to kb.Nlast, and not the kb.nFirst to isolate the switch
16038         statement.
16039
16040         Extract the underlying type, so enumerations of long/ulong are
16041         treated like long/ulong.
16042
16043 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
16044
16045         * expression.cs (New): Overload the meaning of RequestedType to
16046         track the possible creation of the NewDelegate type, since
16047         DoResolve is invoked more than once for new constructors on field
16048         initialization.
16049
16050         See bugs: #48800 and #37014
16051
16052         * cs-parser.jay (declare_local_constants): Take an arraylist
16053         instead of a single constant.
16054
16055         (local_constant_declaration): It should take a
16056         constant_declarators, not a constant_declarator.  Fixes 49487
16057
16058         * convert.cs: Fix error report.
16059
16060 2003-10-13 Jackson Harper <jackson@ximian.com>
16061
16062         * typemanager.cs (TypeToCoreType): Add float and double this fixes
16063         bug #49611
16064
16065 2003-10-09  Martin Baulig  <martin@ximian.com>
16066
16067         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
16068         to the .ctor.
16069         (MethodCore.DoDefineParameters): Removed the TypeContainer
16070         argument; use the DeclSpace which was passed to the .ctor instead.
16071         (MethodCore.CheckParameter): Take a DeclSpace instead of a
16072         TypeContainer; we only need a DeclSpace here.
16073
16074 2003-10-09  Martin Baulig  <martin@ximian.com>
16075
16076         * class.cs (MethodData): Added additional `DeclSpace ds' argument
16077         to the .ctor.
16078         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
16079         EmitContext's .ctor.    
16080
16081 2003-10-09  Martin Baulig  <martin@ximian.com>
16082
16083         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
16084         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
16085         AsAccessible(), moved them as well.
16086
16087         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
16088
16089 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
16090
16091         * cs-parser.jay : Renamed yyName to yyNames related to jay.
16092
16093 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
16094
16095         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
16096         generation for >=, as spotted by Paolo, bug 48679.  
16097         Patch from David Waite.
16098
16099         * cs-tokenizer.cs: Add handling for #pragma.
16100
16101         * cs-parser.jay: Allow for both yield and yield return in the
16102         syntax.  The anti-cobolization of C# fight will go on!
16103
16104         * class.cs (TypeBuilder.DefineType): Catch error condition here
16105         (Parent.DefineType erroring out and returning null).
16106
16107         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
16108         coping with enumerations variables, we were mistakenly processing
16109         them as a regular value type instead of built-in types.  Fixes the
16110         bug #48063
16111
16112         * typemanager.cs (IsBuiltinOrEnum): New method.
16113
16114 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
16115
16116         * cs-parser.jay: Upgrade: yield now needs the return clause.
16117
16118 2003-09-19  Martin Baulig  <martin@ximian.com>
16119
16120         * decl.cs (MemberCache.SetupCacheForInterface): Take a
16121         `MemberCache parent' argument.  Normally, an interface doesn't
16122         have a parent type except System.Object, but we use this in gmcs
16123         for generic type parameters.
16124
16125 2003-09-18  Martin Baulig  <martin@ximian.com>
16126
16127         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
16128         on `type.IsInterface'; don't check whether the type has a parent
16129         to determine whether it's an interface.
16130
16131 2003-09-15  Martin Baulig  <martin@ximian.com>
16132
16133         * class.cs (TypeContainer.DefineType): Added an error flag to
16134         avoid reporting duplicate CS0146's ("class definition is
16135         circular.").
16136
16137         * driver.cs (Driver.MainDriver): Abort if
16138         RootContext.ResolveTree() reported any errors.
16139
16140 2003-09-07  Martin Baulig  <martin@ximian.com>
16141
16142         * report.cs (Error, Warning): Added overloaded versions which take
16143         a `params object[] args' and call String.Format().
16144
16145 2003-09-07  Martin Baulig  <martin@ximian.com>
16146
16147         * decl.cs (DeclSpace..ctor): Don't call
16148         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
16149         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
16150         (DeclSpace.RecordDecl): New method.
16151
16152         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
16153
16154 2003-09-02  Ravi Pratap  <ravi@ximian.com>
16155
16156         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
16157         value attributes to be applied to ParameterBuilders.
16158
16159         * class.cs (MethodCore.LabelParameters): Make static and more
16160         generic so that it can be used from other places - like interface
16161         methods, for instance.
16162
16163         * interface.cs (Interface.Emit): Call LabelParameters before
16164         emitting attributes on the InterfaceMethod.
16165
16166 2003-08-26  Martin Baulig  <martin@ximian.com>
16167
16168         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
16169         resolving aliases; fixes #47927.
16170
16171 2003-08-26  Martin Baulig  <martin@ximian.com>
16172
16173         * statement.cs (Using.DoResolve): This is internally emitting a
16174         try/finally clause, so we need to set ec.NeedExplicitReturn if we
16175         do not always return.  Fixes #47681.
16176
16177 2003-08-26  Martin Baulig  <martin@ximian.com>
16178
16179         * decl.cs (MemberCore): Moved WarningNotHiding(),
16180         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
16181         into MemberBase.
16182         (AdditionResult): Make this nested in DeclSpace.
16183         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
16184         argument; call NamespaceEntry.Define() unless we're nested in a
16185         class or struct.
16186
16187         * namespace.cs (Namespace.DefineName): New public function.  This
16188         is called from DeclSpace's .ctor to add 
16189         (Namespace.Lookup): Include DeclSpaces in the lookup.
16190
16191         * class.cs (Operator): Derive from MemberBase, not MemberCore.
16192
16193         * const.cs (Const): Derive from MemberBase, not MemberCore.     
16194
16195 2003-08-25  Martin Baulig  <martin@ximian.com>
16196
16197         * convert.cs (Convert.ExplicitReferenceConversion): When
16198         converting from an interface type to a class, unbox if the target
16199         type is a struct type.  Fixes #47822.
16200
16201 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16202
16203         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
16204         #47854.
16205
16206 2003-08-22  Martin Baulig  <martin@ximian.com>
16207
16208         * class.cs (TypeManager.DefineType): When defining a nested type,
16209         call DefineType() on our parent; fixes #47801.
16210
16211 2003-08-22  Martin Baulig  <martin@ximian.com>
16212
16213         * class.cs (MethodData.Define): While checking if a method is an
16214         interface implementation, improve the test a bit more to fix #47654.
16215
16216 2003-08-22  Martin Baulig  <martin@ximian.com>
16217
16218         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
16219         correctly; fixes #47722.
16220
16221 2003-08-22  Martin Baulig  <martin@ximian.com>
16222
16223         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
16224         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
16225
16226         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
16227
16228 2003-08-22  Martin Baulig  <martin@ximian.com>
16229
16230         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
16231         can only be assigned in static constructors.  Fixes #47161.
16232
16233 2003-08-22  Martin Baulig  <martin@ximian.com>
16234
16235         Rewrote and improved the flow analysis code.
16236
16237         * flowbranching.cs (FlowBranching): Make this class abstract.
16238         (FlowBranching.CreateBranching): New static function to create a
16239         new flow branching.
16240         (FlowBranchingBlock, FlowBranchingException): New classes.
16241         (FlowBranching.UsageVector.Type): New public readonly field.
16242         (FlowBranching.UsageVector.Breaks): Removed the setter.
16243         (FlowBranching.UsageVector.Returns): Removed the setter.
16244         (FlowBranching.UsageVector): Added Break(), Return(),
16245         NeverReachable() and Throw() methods to modify the reachability.
16246         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
16247         done by FlowBranching.Merge().
16248         (FlowBranching.UsageVector.MergeChild): New method; merges the
16249         merge result into the current vector.
16250         (FlowBranching.Merge): New abstract method to merge a branching.
16251
16252 2003-08-12  Martin Baulig  <martin@ximian.com>
16253
16254         * expression.cs (Indirection.CacheTemporaries): Create the
16255         LocalTemporary with the pointer type, not its element type.
16256
16257 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
16258
16259         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
16260         token was a keyword or not.
16261
16262         Add `error' options where an IDENTIFIER was expected;  Provide
16263         CheckToken and CheckIdentifierToken convenience error reporting
16264         functions. 
16265
16266         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
16267
16268         * decl.cs: Rename `NamespaceEntry Namespace' public field into
16269         NameSpaceEntry NameSpaceEntry.
16270
16271         (LookupInterfaceOrClass): Avoid creating a full qualified name
16272         from namespace and name: avoid doing lookups when we know the
16273         namespace is non-existant.   Use new Tree.LookupByNamespace which
16274         looks up DeclSpaces based on their namespace, name pair.
16275
16276         * driver.cs: Provide a new `parser verbose' to display the
16277         exception thrown during parsing.  This is turned off by default
16278         now, so the output of a failure from mcs is more graceful.
16279
16280         * namespace.cs: Track all the namespaces defined in a hashtable
16281         for quick lookup.
16282
16283         (IsNamespace): New method
16284
16285 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
16286
16287         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
16288         we know that we need to concatenate (full typename can never be
16289         null). 
16290
16291         * class.cs: ditto.
16292
16293         * statement.cs: Use a bitfield;  Do not initialize to null things
16294         which are done by the constructor by default.
16295
16296         * cs-parser.jay: bug fix, parameter was 4, not 3.
16297
16298         * expression.cs: Just use the property;
16299
16300         * statement.cs: No need for GetVariableInfo method.
16301
16302 2003-08-08  Martin Baulig  <martin@ximian.com>
16303
16304         * flowanalysis.cs (FlowReturns): This is now nested in the
16305         `FlowBranching' class.
16306         (MyBitVector): Moved this here from statement.cs.
16307         (FlowBranching.SiblingType): New enum type.
16308         (FlowBranching.CreateSibling): Added `SiblingType' argument.
16309
16310 2003-08-07  Martin Baulig  <martin@ximian.com>
16311
16312         * flowanalysis.cs (FlowBranchingType): This is now nested in the
16313         `FlowBranching' class and called `BranchingType'.
16314
16315 2003-08-07  Martin Baulig  <martin@ximian.com>
16316
16317         * flowanalysis.cs: Moved all the control flow analysis code into
16318         its own file.
16319
16320 2003-08-07  Martin Baulig  <martin@ximian.com>
16321
16322         * assign.cs (Assign.DoResolve): `target' must either be an
16323         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
16324         #37319.
16325
16326 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
16327
16328         * expression.cs (BinaryMethod): This kind of expression is created by the
16329         Binary class if it determines that the operator has to be handled
16330         by a method.
16331
16332         (BinaryDelegate): This kind of expression is created if we are
16333         dealing with a + or - operator on delegates.
16334
16335         (Binary): remove method, argumetns, and DelegateOperator: when
16336         dealing with methods, 
16337
16338         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
16339
16340         * statement.cs (Block): use bitfields for the three extra booleans
16341         we had in use.   Remove unused topblock parameter.
16342
16343         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
16344
16345         * assign.cs: Drop extra unneeded tests.
16346
16347 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
16348
16349         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
16350
16351         * statement.cs (Foreach): Use VariableStorage instead of
16352         LocalBuilders.   
16353
16354         * codegen.cs (VariableStorage): New class used by clients that
16355         require a variable stored: locals or fields for variables that
16356         need to live across yield.
16357
16358         Maybe provide a convenience api for EmitThis+EmitLoad?
16359
16360         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
16361         these bad boys.
16362
16363 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
16364
16365         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
16366         RemapParameterLValue): New methods that are used to turn a
16367         precomputed FieldInfo into an expression like this:
16368
16369                 instance.FieldInfo
16370
16371         The idea is to use this instead of making LocalVariableReference
16372         have more than one meaning.
16373
16374         * cs-parser.jay: Add error production to BASE.
16375
16376         * ecore.cs: Deal with TypeManager.GetField returning null, which
16377         is now a valid return value.
16378
16379         (FieldExprNoAddress): New expression for Fields whose address can
16380         not be taken.
16381
16382         * expression.cs (LocalVariableReference): During the resolve
16383         phases, create new expressions if we are in a remapping context.
16384         Remove code that dealt with remapping here.
16385
16386         (ParameterReference): same.
16387
16388         (ProxyInstance): New expression, like the `This' expression, but
16389         it is born fully resolved.  We know what we are doing, so remove
16390         the errors that are targeted to user-provided uses of `this'.
16391
16392         * statement.cs (Foreach): our variable is now stored as an
16393         Expression;  During resolution, follow the protocol, dont just
16394         assume it will return this.
16395
16396 2003-08-06  Martin Baulig  <martin@ximian.com>
16397
16398         * support.cs (SeekableStreamReader.cs): New public class.
16399
16400         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
16401         SeekableStreamReader instead of the normal StreamReader.
16402
16403 2003-08-04  Martin Baulig  <martin@ximian.com>
16404
16405         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
16406         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
16407         deambiguate casts and delegate invocations.
16408         (parenthesized_expression): Use the new tokens to ensure this is
16409         not a cast of method invocation.
16410
16411         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
16412         when reading a `)' and Deambiguate_CloseParens () was previously
16413         called.
16414
16415         * expression.cs (ParenthesizedExpression): New class.  This is
16416         just used for the CS0075 test.
16417         (Binary.DoResolve): Check for CS0075.   
16418
16419 2003-07-29  Ravi Pratap  <ravi@ximian.com>
16420
16421         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
16422         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
16423         reference comparison.
16424
16425         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
16426         examine the ReturnType for equality - this is necessary in the
16427         cases of implicit and explicit operators whose signature also
16428         includes the return type.
16429
16430 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
16431
16432         * namespace.cs: Cache the result of the namespace computation,
16433         instead of computing it every time.
16434
16435 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
16436
16437         * decl.cs: Use a global arraylist that we reuse over invocations
16438         to avoid excesive memory consumption.  Reduces memory usage on an
16439         mcs compile by one meg (45 average).
16440
16441         * typemanager.cs (LookupTypeReflection): In .NET pointers are
16442         private, work around that.
16443
16444 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
16445
16446         * literal.cs (IntLiteral): Define Zero and One static literals. 
16447
16448         * cs-parser.jay (integer_literal): use static literals to reduce
16449         memory usage for the most used literals (0, 1 and -1).  211kb
16450         reduced in memory usage.
16451
16452         Replace all calls to `new ArrayList' with `new
16453         ArrayList(4)' which is a good average number for most allocations,
16454         and also requires only 16 bytes of memory for its buffer by
16455         default. 
16456
16457         This reduced MCS memory usage in seven megabytes for the RSS after
16458         bootstrapping.
16459
16460 2003-07-28  Ravi Pratap  <ravi@ximian.com>
16461
16462         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
16463         handle params methods the correct way by forming only one
16464         applicable set with params and normal methods in them. Earlier we
16465         were looking at params methods only if we found no normal methods
16466         which was not the correct thing to do.
16467
16468         (Invocation.BetterFunction): Take separate arguments indicating
16469         when candidate and the best method are params methods in their
16470         expanded form.
16471
16472         This fixes bugs #43367 and #46199.
16473
16474         * attribute.cs: Documentation updates.
16475
16476         (CheckAttribute): Rename to CheckAttributeTarget.
16477         (GetValidPlaces): Rename to GetValidTargets.
16478
16479         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
16480         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
16481
16482         Fixes bug #44468.
16483
16484 2003-07-28  Martin Baulig  <martin@ximian.com>
16485
16486         * class.cs (TypeContainer.DefineMembers): Use the base type's full
16487         name when looking up the base class of a nested class.  Fixes #46977.
16488
16489 2003-07-26  Martin Baulig  <martin@ximian.com>
16490
16491         * expression.cs (Indexers.Indexer): New nested struct; contains
16492         getter, setter and the indexer's type.
16493         (Indexers.Properties): This is now an ArrayList of
16494         Indexers.Indexer's.
16495         (IndexerAccess.DoResolveLValue): Correctly set the type if the
16496         indexer doesn't have any getters.
16497
16498         * assign.cs (Assign.DoResolve): Also do the implicit conversions
16499         for embedded property and indexer assignments.
16500
16501 2003-07-26  Martin Baulig  <martin@ximian.com>
16502
16503         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
16504         preprocessor directive is not the first non-whitespace character
16505         on a line.
16506
16507 2003-07-26  Martin Baulig  <martin@ximian.com>
16508
16509         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
16510         namespace parsing, follow the spec more closely.
16511
16512         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
16513         NamespaceEntry.Lookup().
16514
16515 2003-07-25  Martin Baulig  <martin@ximian.com>
16516
16517         * MethodCore.cs (OverridesSomething): New public field; it's set
16518         from TypeContainer.DefineMembers if this method overrides
16519         something (which doesn't need to be a method).  Fix #39462.
16520
16521 2003-07-25  Ravi Pratap  <ravi@ximian.com>
16522
16523         * typemanager.cs (GetMembers): Ensure that the list of members is
16524         reversed. This keeps things in sync.
16525
16526         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
16527         find an AttributeUsage attribute.
16528
16529         * expression.cs (Invocation.OverloadResolve): Perform the check
16530         which disallows Invoke to be directly called on a Delegate.
16531
16532         (Error_InvokeOnDelegate): Report error cs1533.
16533
16534 2003-07-25  Martin Baulig  <martin@ximian.com>
16535
16536         * expression.cs (Indexers.GetIndexersForType): Only look in the
16537         interface hierarchy if the requested type is already an
16538         interface.  Fixes #46788 while keeping #46502 fixed.
16539
16540 2003-07-25  Martin Baulig  <martin@ximian.com>
16541
16542         * class.cs (TypeContainer.DefineMembers): Check whether all
16543         readonly fields have been assigned and report warning CS0649 if
16544         not.
16545
16546         * statement.cs (LocalInfo.IsFixed): Always return true if this is
16547         a valuetype.
16548
16549 2003-07-24  Ravi Pratap  <ravi@ximian.com>
16550
16551         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
16552         returned from GetMethods to make things consistent with the
16553         assumptions MCS makes about ordering of methods.
16554
16555         This should comprehensively fix bug #45127 and it does :-)
16556
16557         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
16558         ordering is actually reverse.
16559
16560         * Clean up some debug messages I left lying around.
16561
16562         * interface.cs (Populate*): Get rid of code which emits attributes
16563         since the stage in which we emit attributes is the 'Emit' stage,
16564         not the define stage.
16565
16566         (Emit): Move attribute emission for interface members here.
16567
16568 2003-07-22  Ravi Pratap  <ravi@ximian.com>
16569
16570         * expression.cs (Invocation.OverloadResolve): Follow the spec more
16571         closely: we eliminate methods in base types when we have an
16572         applicable method in a top-level type.
16573
16574         Please see section 14.5.5.1 for an exact description of what goes
16575         on. 
16576
16577         This fixes bug #45127 and a host of other related to corlib compilation.
16578
16579         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
16580         array is the method corresponding to the top-level type (this is
16581         because of the changes made to icall.c) so we change this
16582         accordingly.
16583
16584         (MethodGroupExpr.Name): This too.
16585
16586         * typemanager.cs (GetElementType): New method which does the right
16587         thing when compiling corlib. 
16588
16589         * everywhere: Make use of the above in the relevant places.
16590
16591 2003-07-22  Martin Baulig  <martin@ximian.com>
16592
16593         * cs-parser.jay (invocation_expression): Moved
16594         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
16595         `cast_expression', but create a InvocationOrCast which later
16596         resolves to either an Invocation or a Cast.
16597
16598         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
16599         method; call this before EmitStatement() to make sure that this
16600         expression can be used as a statement.
16601
16602         * expression.cs (InvocationOrCast): New class; resolves to either
16603         an Invocation or a Cast.
16604
16605         * statement.cs (StatementExpression): Call ResolveStatement() on
16606         the ExpressionStatement before emitting it.
16607
16608 2003-07-21  Martin Baulig  <martin@ximian.com>
16609
16610         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
16611         `ref' and `out' attributes match; fixes #46220.
16612         (MemberAccess.ResolveMemberAccess): You can't reference a type
16613         through an expression; fixes #33180.
16614         (Indexers.GetIndexersForType): Don't return the indexers from
16615         interfaces the class implements; fixes #46502.
16616
16617 2003-07-21  Martin Baulig  <martin@ximian.com>
16618
16619         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
16620         CS0661 checks; fixes bug #30442.
16621
16622 2003-07-21  Martin Baulig  <martin@ximian.com>
16623
16624         * decl.cs (AdditionResult): Added `Error'.
16625
16626         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
16627
16628         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
16629         makes cs0031.cs actually work.
16630
16631 2003-07-20  Martin Baulig  <martin@ximian.com>
16632
16633         * namespace.cs: Fixed that bug which caused a crash when compiling
16634         the debugger's GUI.
16635
16636 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
16637
16638         * typemanager.cs (LookupTypeReflection): Never expose types which
16639         are NotPublic, NestedPrivate, NestedAssembly, or
16640         NestedFamANDAssem.  We used to return these, and later do a check
16641         that would report a meaningful error, but the problem is that we
16642         would not get the real match, if there was a name override.
16643
16644 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
16645
16646         * namespace.cs (Namespace, Name): Do not compute the namespace
16647         name dynamically, compute it in the constructor.  This reduced
16648         memory usage by 1697 KB.
16649
16650         * driver.cs: Use --pause to pause at the end.
16651
16652 2003-07-17  Peter Williams  <peter@newton.cx>
16653
16654         * Makefile: Change the name of the test target so that it doesn't
16655         conflict with the recursive test target.
16656
16657 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
16658
16659         * expression.cs (LocalVariableReference.Emit, EmitAssign,
16660         AddressOf): Do not use EmitThis, that was wrong, use the actual
16661         this pointer.
16662
16663 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
16664
16665         * class.cs (MethodData.Define): While checking if a method is an
16666         interface implementation, improve the test: If we are not public
16667         (use new test here: use the computed MethodAttributes directly,
16668         instead of the parsed modifier flags) check if the `implementing'
16669         method comes from an interface or not.
16670
16671         * pending.cs (VerifyPendingMethods): Slightly better error
16672         message.
16673
16674         * makefile: add test target that does the mcs bootstrap.
16675
16676 2003-07-16  Ravi Pratap  <ravi@ximian.com>
16677
16678         * interface.cs (Define): Do nothing here since there are no
16679         members to populate etc. Move the attribute emission out of here
16680         since this was just totally the wrong place to put it. Attribute
16681         application happens during the 'Emit' phase, not in the 'Define'
16682         phase.
16683
16684         (Emit): Add this method and move the attribute emission here
16685
16686         * rootcontext.cs (EmitCode): Call the Emit method on interface
16687         types too.
16688
16689 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
16690
16691         * expression.cs (OverloadResolve): Report error only if Location
16692         is not 'Null' which means that there was a probe going on.
16693
16694 2003-07-14  Martin Baulig  <martin@ximian.com>
16695
16696         * expression.cs (ConditionalLogicalOperator): New public class to
16697         implement user defined conditional logical operators.
16698         This is section 14.11.2 in the spec and bug #40505.
16699
16700 2003-07-14  Martin Baulig  <martin@ximian.com>
16701
16702         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
16703
16704 2003-07-14  Martin Baulig  <martin@ximian.com>
16705
16706         * codegen.cs (EmitContext.InFixedInitializer): New public field.
16707
16708         * ecore.cs (IVariable.VerifyFixed): New interface method.
16709
16710         * expression.cs (Unary.ResolveOperator): When resolving the `&'
16711         operator, check whether the variable is actually fixed.  Fixes bug
16712         #36055.  Set a variable definitely assigned when taking its
16713         address as required by the spec.
16714
16715         * statement.cs (LocalInfo.IsFixed): New field.
16716         (LocalInfo.MakePinned): Set `IsFixed' to true.
16717
16718 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
16719
16720         * attribute.cs (Attribute.Resolve): While doing a Member lookup
16721         for .ctors, ensure that we only ask for members declared in the
16722         attribute type (BindingFlags.DeclaredOnly).
16723
16724         Fixes bug #43632.
16725
16726         * expression.cs (Error_WrongNumArguments): Report error 1501
16727         correctly the way CSC does.
16728
16729 2003-07-13  Martin Baulig  <martin@ximian.com>
16730
16731         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
16732         lookup on the fully qualified name, to make things like "X.X" work
16733         where "X.X" is a fully qualified type name, but we also have a
16734         namespace "X" in the using list.  Fixes #41975.
16735
16736 2003-07-13  Martin Baulig  <martin@ximian.com>
16737
16738         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
16739         function. If we're a CompoundAssign, we need to create an embedded
16740         CompoundAssign, not an embedded Assign.
16741         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
16742         Fixes #45854.
16743
16744 2003-07-13  Martin Baulig  <martin@ximian.com>
16745
16746         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
16747         work to fix bug #46088.
16748
16749 2003-07-13  Ravi Pratap <ravi@ximian.com>
16750
16751         * class.cs (Operator.Emit): Do not emit attributes here - it is
16752         taken care of by the Method class that we delegate too. This takes
16753         care of bug #45876.
16754
16755 2003-07-10  Martin Baulig  <martin@ximian.com>
16756
16757         * expression.cs (TypeOfVoid): New class.
16758         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
16759
16760 2003-07-10  Martin Baulig  <martin@ximian.com>
16761
16762         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
16763         bug #35957.
16764
16765 2003-07-10  Martin Baulig  <martin@ximian.com>
16766
16767         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
16768         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
16769
16770         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
16771
16772         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
16773
16774 2003-07-10  Martin Baulig  <martin@ximian.com>
16775
16776         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
16777         of decimal.  Fixes #42850.
16778
16779         NOTE: I also fixed the created byte blob, but this doesn't work on
16780         the MS runtime and csc never produces any byte blobs for decimal
16781         arrays.
16782
16783 2003-07-10  Martin Baulig  <martin@ximian.com>
16784
16785         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
16786         structs; fixes #32068.
16787         (Block.AddChildVariableNames): Fixed #44302.
16788
16789 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16790
16791         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
16792
16793 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
16794
16795         * attribute.cs: And this test is onger needed.
16796
16797 2003-07-08  Martin Baulig  <martin@ximian.com>
16798
16799         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
16800         inaccessible types.  Fixes #36313.
16801
16802         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
16803
16804         * namespace.cs (NamespaceEntry): Create implicit entries for all
16805         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
16806         implicit entries for N1.N2 and N1.
16807
16808 2003-07-08  Martin Baulig  <martin@ximian.com>
16809
16810         Rewrote the handling of namespaces to fix a lot of the issues
16811         wrt. `using' aliases etc.
16812
16813         * namespace.cs (Namespace): Splitted this class into a
16814         per-assembly `Namespace' and a per-file `NamespaceEntry'.
16815
16816         * typemanager.cs (TypeManager.IsNamespace): Removed.
16817         (TypeManager.ComputeNamespaces): Only compute namespaces from
16818         loaded assemblies here, not the namespaces from the assembly we're
16819         currently compiling.
16820
16821 2003-07-08  Martin Baulig  <martin@ximian.com>
16822
16823         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
16824
16825 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
16826
16827         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
16828         already fixed it.  
16829
16830         I thought about the memory savings here, but LookupTypeReflection
16831         is used under already very constrained scenarios.  Compiling
16832         corlib or mcs only exposes one hit, so it would not really reduce
16833         any memory consumption.
16834
16835 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16836
16837         * typemanager.cs: fixes bug #45889 by only adding public types from
16838         other assemblies to the list of known types.
16839
16840 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
16841
16842         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
16843         on the type we resolved.
16844
16845 2003-07-05  Martin Baulig  <martin@ximian.com>
16846
16847         * pending.cs (PendingImplementation.ParentImplements): Don't
16848         create the proxy if the parent is abstract.
16849
16850         * class.cs (TypeContainer.DefineIndexers): Process explicit
16851         interface implementations first.  Fixes #37714.
16852
16853 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
16854
16855         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
16856         defined recursively;  but since we modify the input parameters
16857         (left is set to `this' temporarily), we reset this value if the
16858         left_is_explicit is false, which gives the original semantics to
16859         the code.  
16860
16861         * literal.cs (NullPointer): new class used to represent a null
16862         literal in a pointer context.
16863
16864         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
16865         type is a pointer, use a NullPointer object instead of a
16866         NullLiteral.   Closes 43687
16867
16868         (ExplicitConversion): Convert pointer values using
16869         the conv opcode to the proper type.
16870
16871         * ecore.cs (New): change ValueTypeVariable property into a method,
16872         that returns whether the valuetype is suitable for being used.
16873
16874         * expression.cs (Binary.DoNumericPromotions): Only return if we
16875         the int constant was a valid uint, and we can return both left and
16876         right as uints.  If not, we continue processing, to trigger the
16877         type conversion.  This fixes 39018.
16878
16879         * statement.cs (Block.EmitMeta): During constant resolution, set
16880         the CurrentBlock property on the emitcontext, so that we resolve
16881         constants propertly.
16882
16883 2003-07-02  Martin Baulig  <martin@ximian.com>
16884
16885         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
16886         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
16887
16888         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
16889         than emitting it here.
16890
16891         * statement.cs: Fixed some more flow analysis bugs.
16892
16893 2003-07-02  Martin Baulig  <martin@ximian.com>
16894
16895         * class.cs (MethodData.Define): When implementing interface
16896         methods, set Final unless we're Virtual.
16897
16898         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
16899         check work for interface methods.
16900
16901 2003-07-01  Martin Baulig  <martin@ximian.com>
16902
16903         * ecore.cs (EmitContext.This): Replaced this property with a
16904         GetThis() method which takes a Location argument.  This ensures
16905         that we get the correct error location for a CS0188.
16906
16907 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
16908
16909         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
16910         ImplicitStandardConversion.
16911
16912         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
16913
16914 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
16915
16916         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
16917         optimization.
16918
16919 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
16920
16921         * class.cs (Constructor.Define): Turn off initlocals for unsafe
16922         constructors.
16923
16924         (MethodData.Define): Turn off initlocals for unsafe methods.
16925
16926 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
16927
16928         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
16929         complete;  Fixes #37521.
16930
16931         * delegate.cs: Use Modifiers.TypeAttr to compute the
16932         TypeAttributes, instead of rolling our own.  This makes the flags
16933         correct for the delegates.
16934
16935 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
16936
16937         * class.cs (Constructor.Define): Set the private flag for static
16938         constructors as well.
16939
16940         * cs-parser.jay (statement_expression): Set the return value to
16941         null, to avoid a crash when we catch an error.
16942
16943 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
16944
16945         * cs-parser.jay: Applied patch from Jackson that adds support for
16946         extern and unsafe modifiers to destructor declarations.
16947
16948         * expression.cs: Report error 21 if the user is trying to index a
16949         System.Array.
16950
16951         * driver.cs: Add an error message, suggested by the bug report.
16952
16953         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
16954         if we do not have a ": this ()" constructor initializer.  Fixes 45149
16955
16956 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
16957
16958         * namespace.cs: Add some information to reduce FAQs.
16959
16960 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
16961
16962         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
16963         underlying enumeration types.  Fixes #43915.
16964
16965         * expression.cs: Treat ushort/short as legal values to be used in
16966         bitwise operations.
16967
16968 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
16969
16970         * delegate.cs: transfer custom attributes for paramenters from
16971         the delegate declaration to Invoke and BeginInvoke.
16972
16973 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
16974
16975         * attribute.cs: handle custom marshalers and emit marshal info
16976         for fields, too.
16977
16978 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
16979
16980         * makefile.gnu: Added anonymous.cs to the compiler sources.
16981
16982 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
16983
16984         * iterators.cs: Change the name of the proxy class to include two
16985         underscores.
16986
16987         * cs-parser.jay: Update grammar to include anonymous methods.
16988
16989         * anonymous.cs: new file.
16990
16991 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
16992
16993         * class.cs (Field.Define): Add missing test for pointers and
16994         safety. 
16995
16996 2003-05-27  Ravi Pratap  <ravi@ximian.com>
16997
16998         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
16999         we use the stobj opcode.
17000
17001         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
17002         since it wasn't the correct fix. 
17003
17004         It still is puzzling that we are required to use stobj for IntPtr
17005         which seems to be a ValueType.
17006
17007 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
17008
17009         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
17010         during regular simple name resolution.   Now, the trick is that
17011         instead of returning for processing the simplename, we do a
17012         TypeManager.LookupType (ie, a rooted lookup as opposed to a
17013         contextual lookup type).   If a match is found, return that, if
17014         not, return for further composition.
17015
17016         This fixes long-standing 30485.
17017
17018         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
17019         using the address to initialize an object, do an Stobj instead of
17020         using the regular Stelem.
17021
17022         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
17023         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
17024         Because if we are a BaseIndexerAccess that value will be true.
17025         Fixes 43643.
17026
17027         * statement.cs (GotoCase.Resolve): Return after reporting an
17028         error, do not attempt to continue. 
17029
17030         * expression.cs (PointerArithmetic.Emit): If our operand is a
17031         long, convert our constants to match the operand before
17032         multiplying.  Convert to I type before adding.   Fixes 43670.
17033
17034 2003-05-14  Ravi Pratap  <ravi@ximian.com>
17035
17036         * enum.cs (ImplicitConversionExists) : Rename to
17037         ImplicitEnumConversionExists to remove ambiguity. 
17038
17039         * ecore.cs (NullCast): New type of cast expression class which
17040         basically is very similar to EmptyCast with the difference being
17041         it still is a constant since it is used only to cast a null to
17042         something else
17043         (eg. (string) null)
17044
17045         * convert.cs (ImplicitReferenceConversion): When casting a null
17046         literal, we return a NullCast.
17047
17048         * literal.cs (NullLiteralTyped): Remove - I don't see why this
17049         should be around anymore.
17050
17051         The renaming (reported was slightly wrong). Corrections:
17052
17053         ConvertImplicitStandard -> ImplicitConversionStandard
17054         ConvertExplicitStandard -> ExplicitConversionStandard
17055
17056         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
17057         before passing them in !
17058
17059         * convert.cs (ImplicitConversionStandard): When comparing for
17060         equal expr and target types, ensure that expr is not a
17061         NullLiteral.
17062
17063         In general, we must not be checking (expr_type ==
17064         target_type) in the top level conversion methods
17065         (ImplicitConversion, ExplicitConversion etc). This checking is
17066         done in the methods that they delegate to.
17067
17068 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
17069
17070         * convert.cs: Move Error_CannotConvertType,
17071         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
17072         ImplicitNumericConversion, ImplicitConversionExists,
17073         ImplicitUserConversionExists, StandardConversionExists,
17074         FindMostEncompassedType, FindMostSpecificSource,
17075         FindMostSpecificTarget, ImplicitUserConversion,
17076         ExplicitUserConversion, GetConversionOperators,
17077         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
17078         TryImplicitIntConversion, Error_CannotConvertImplicit,
17079         ConvertImplicitRequired, ConvertNumericExplicit,
17080         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
17081         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
17082         its own file.
17083
17084         Perform the following renames:
17085
17086         StandardConversionExists -> ImplicitStandardConversionExists
17087         ConvertImplicit -> ImplicitConversion
17088         ConvertImplicitStandard -> ImplicitStandardConversion
17089         TryImplicitIntConversion -> ImplicitIntConversion
17090         ConvertImplicitRequired -> ImplicitConversionRequired
17091         ConvertNumericExplicit -> ExplicitNumericConversion
17092         ConvertReferenceExplicit -> ExplicitReferenceConversion
17093         ConvertExplicit -> ExplicitConversion
17094         ConvertExplicitStandard -> ExplicitStandardConversion
17095
17096 2003-05-19  Martin Baulig  <martin@ximian.com>
17097
17098         * statement.cs (TypeInfo.StructInfo): Made this type protected.
17099         (TypeInfo): Added support for structs having structs as fields.
17100
17101         * ecore.cs (FieldExpr): Implement IVariable.
17102         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
17103         VariableInfo for the field.
17104
17105 2003-05-18  Martin Baulig  <martin@ximian.com>
17106
17107         * expression.cs (This.DoResolve): Report a CS0027 if we're
17108         emitting a field initializer.
17109
17110 2003-05-18  Martin Baulig  <martin@ximian.com>
17111
17112         * expression.cs (This.ResolveBase): New public function.
17113         (This.DoResolve): Check for CS0188.
17114
17115         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
17116         This.Resolve().
17117
17118         * ecore.cs (MethodGroupExpr.DoResolve): Set the
17119         `instance_expression' to null if we don't have any non-static
17120         methods.
17121
17122 2003-05-18  Martin Baulig  <martin@ximian.com>
17123
17124         Reworked the way how local variables and parameters are handled by
17125         the flow analysis code.
17126
17127         * statement.cs (TypeInfo, VariableMap): New public classes.
17128         (VariableInfo): New public class.  This is now responsible for
17129         checking whether a variable has been assigned.  It is used for
17130         parameters and local variables.
17131         (Block.EmitMeta): Take the InternalParameters as argument; compute
17132         the layout of the flow vectors here.
17133         (Block.LocalMap, Block.ParameterMap): New public properties.
17134         (FlowBranching): The .ctor doesn't get the InternalParameters
17135         anymore since Block.EmitMeta() now computes the layout of the flow
17136         vector.
17137         (MyStructInfo): This class is now known as `StructInfo' and nested
17138         in `TypeInfo'; we don't access this directly anymore.
17139
17140         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
17141         property and removed IsAssigned(), IsFieldAssigned(),
17142         SetAssigned() and SetFieldAssigned(); we now call them on the
17143         VariableInfo so we don't need to duplicate this code everywhere.
17144
17145         * expression.cs (ParameterReference): Added `Block block' argument
17146         to the .ctor.
17147         (LocalVariableReference, ParameterReference, This): The new
17148         VariableInfo class is now responsible for all the definite
17149         assignment stuff.
17150
17151         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
17152         IsParameterAssigned, SetParameterAssigned): Removed.
17153
17154 2003-05-18  Martin Baulig  <martin@ximian.com>
17155
17156         * typemanager.cs (InitCoreTypes): Try calling
17157         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
17158         the 3-args-version.  Corlib now also needs our `void_type'.
17159         (GetMethod): Added overloaded version which takes an optional
17160         `bool report_errors' to allow lookups of optional methods.
17161
17162 2003-05-12  Martin Baulig  <martin@ximian.com>
17163
17164         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
17165         only used for locals and not for parameters.
17166
17167 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
17168
17169         * support.cs (InternalParameters.ParameterType): Return the
17170         ExternalType of the parameter.
17171
17172         * parameter.cs (Parameter.ExternalType): drop the two arguments,
17173         they were unused.
17174
17175 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
17176
17177         * class.cs (MethodData.Define): Do not set the `newslot' on
17178         interface members, if they are also flagged as "override".
17179
17180         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
17181         better code for ++i and i++.  This only works for static fields
17182         and local variables.
17183
17184         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
17185         want to pull the DeclSpace out of the builder_to_declspace instead
17186         of the TypeBuilder (like in TypeContainer.FindMembers).
17187
17188         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
17189         instead of LookupTypeContainer.  Fixes the crash on .NET for
17190         looking up interface members.
17191
17192         * const.cs: Create our own emit context during the Definition
17193         stage, so that constants are evaluated in the proper context, when
17194         a recursive definition happens.
17195
17196 2003-05-11  Martin Baulig  <martin@ximian.com>
17197
17198         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
17199         new block for a switch section.
17200         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
17201         the adding/lookup in the switch block.  Fixes #39828.
17202
17203 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
17204
17205         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
17206         functionality: I needed to convert the data after I had performed
17207         the add/sub operation into the operands type size.
17208
17209         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
17210         pass the type for the box operation, otherwise the resulting
17211         object would have been of type object.
17212
17213         (BoxedCast): Add constructor to specify the type to box as.
17214
17215 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
17216
17217         * iterators.cs: I was reusing the `count' variable inadvertently,
17218         take steps to not allow this to happen.
17219
17220 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
17221
17222         * attribute.cs (Attribute.Resolve): Params attributes are encoded
17223         by creating an array at the point where the params starts and
17224         putting all those arguments there, then adjusting the size of the
17225         array.
17226
17227 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
17228
17229         * expression.cs (New.AddressOf): Implement interface
17230         IMemoryLocation.  This is used when the `new' operator is used in
17231         the context of an invocation to a method on a value type.
17232
17233         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
17234         example. 
17235
17236         * namespace.cs: Also check the using aliases here.
17237
17238         * driver.cs: Move the test for using validity after the types have
17239         been entered, so we do a single pass that also includes the using
17240         aliases. 
17241
17242         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
17243         in the regular case.   CreateSiblingForFinally is doing extra
17244         error checking.
17245
17246         * attribute.cs (GetAttributeArgumentExpression): Store the result
17247         on an out value, and use the return value to indicate failure
17248         instead of using null (which is a valid return for Constant.GetValue).
17249
17250         * statement.cs: Perform the analysis flow for the increment
17251         portion after the statement, because this will be the real flow of
17252         execution.  Fixes #42385
17253
17254         * codegen.cs (EmitContext.EmitArgument,
17255         EmitContext.EmitStoreArgument): New helper functions when the
17256         RemapToProxy flag is set.
17257
17258         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
17259         function.
17260
17261         Add support for remapping parameters. 
17262
17263         * iterators.cs: Propagate parameter values;  Store parameter
17264         values in the proxy classes.
17265
17266 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
17267
17268         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
17269         need a proxy reference;  I do not know what I was thinking
17270
17271         * cs-parser.jay (constructor_initializer): catch another error,
17272         and display nice message.
17273
17274         (field_declaration): catch void field declaration
17275         to flag a better error. 
17276
17277         * class.cs (MemberBase.CheckBase): Report an error instead of a
17278         warning if a new protected member is declared in a struct. 
17279         (Field.Define): catch the error of readonly/volatile.
17280
17281         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
17282
17283         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
17284         volatile variable is taken
17285
17286 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
17287
17288         * statement.cs (Fixed.Resolve): Report an error if we are not in
17289         an unsafe context.
17290
17291 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
17292
17293         * typemanager.cs: reuse the code that handles type clashes for
17294         delegates and enumerations.
17295
17296         * class.cs (Report28): Always report.
17297
17298         * expression.cs (EncodeAsAttribute): Allow nulls here.
17299
17300 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
17301
17302         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
17303         the functionality for testing whether an expression is valid for
17304         an attribute here.  Also handle the case of arrays of elements
17305         being stored. 
17306
17307         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
17308         encoding a linear array into an array of objects that are suitable
17309         to be passed to an CustomAttributeBuilder.
17310
17311         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
17312
17313         * ecore.cs: (FieldExpr): Handle field remapping here.
17314
17315         * iteratators.cs: Pass the instance variable (if the method is an
17316         instance method) to the constructors, so we can access the field
17317         variables on the class.
17318
17319         TODO: Test this with structs.  I think the THIS variable on
17320         structs might have to be a pointer, and not a refenrece
17321
17322 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
17323
17324         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
17325         local variables to fields in a proxy class.
17326
17327         * iterators.cs (PopulateProxy): Rename our internal fields to
17328         <XXX>.  
17329         Create a <THIS> field if we are an instance method, so we can
17330         reference our parent container variables.
17331         (MapVariable): Called back from the EmitContext code to enter a
17332         new variable to field mapping into the proxy class (we just create
17333         a FieldBuilder).
17334
17335         * expression.cs
17336         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
17337         for using the remapped locals to fields.
17338
17339         I placed the code here, because that gives the same semantics to
17340         local variables, and only changes the Emit code.
17341
17342         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
17343         statements inside iterators.
17344         (VariableInfo): Add a FieldBuilder for the cases when we are
17345         remapping local variables to fields in a proxy class
17346
17347         * ecore.cs (SimpleNameResolve): Avoid testing two times for
17348         current_block != null.
17349
17350         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
17351         not cope with strings, as it has been moved to the
17352         TableSwitchEmit.  Fixed bug in switch generation.
17353
17354         * expression.cs (New.DoResolve): Provide more context for the user
17355         when reporting an error.
17356
17357         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
17358         pointers. 
17359
17360         * expression.cs (MemberAccess.DoResolve): When we get a type back,
17361         check the permissions for it.  Note than in a type-resolution
17362         context the check was already present in DeclSpace.ResolveType,
17363         but was missing from the MemberAccess.
17364
17365         (ArrayCreation.CheckIndices): warn if the user has
17366         more nested levels of expressions, but there are no more
17367         dimensions specified.  Avoids crash on bug 41906.
17368
17369 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
17370
17371         * statement.cs (Block): replace Implicit bool, for a generic
17372         flags.   
17373         New flag: `Unchecked'.  This is used during the EmitMeta phase
17374         (which is out-of-line with the regular Resolve/Emit process for a
17375         statement, as this is done ahead of time, but still gets a chance
17376         to call constant resolve).
17377
17378         (Block.Flags): new enum for adding a new flag.
17379
17380         (Block.EmitMeta): track the state of unchecked.
17381
17382         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
17383         to enable constant resolution to work there as well.
17384
17385 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
17386
17387         * typemanager.cs (ienumerable_type): Also look up
17388         System.Collections.IEnumerable. 
17389
17390 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
17391
17392         TODO: Test more than one conditional per method.
17393
17394         * class.cs (Indexer.Define): Report the location where the user is
17395         referencing the unsupported feature.
17396
17397         (MethodData): Overload the use of `conditionals' to
17398         minimize the creation of needless ArrayLists.   This saves roughly
17399         212kb on my machine.
17400
17401         (Method): Implement the new IIteratorContainer interface.
17402         (Method.SetYields): Implement the method by setting the ModFlags
17403         to contain METHOD_YIELDS.
17404
17405         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
17406         which just got set to null.
17407
17408         * iterators.cs: New file.
17409
17410         (Yield, YieldBreak): New statements.
17411
17412         * statement.cs (Return.Resolve): Flag an error if we are used in
17413         an iterator method.
17414
17415         * codegen.cs (InIterator): New flag set if the code is being
17416         compiled in an iterator method.
17417
17418         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
17419         internal modifier, and we just use it to avoid adding extra
17420         fields, as this is seldom used.  
17421
17422         * cs-parser.jay: Add yield_statement (yield and yield break).
17423
17424         * driver.cs: New flag -v2 to turn on version 2 features. 
17425
17426         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
17427         hashtable when v2 is enabled.
17428
17429 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
17430
17431         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
17432         there is already a namespace defined with this name.
17433
17434         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
17435         people upgraded their corlibs.
17436
17437         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
17438         always use fully qualified types, no need to use the compiler
17439         front end.
17440
17441         (TypeManager.IsNamespace): Use binarysearch.
17442
17443         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
17444         AddDelegate): I did not quite use the new IsValid API properly: I
17445         have to pass the short-name and the fullname.  I was passing only
17446         the basename instead of the fullname sometimes. 
17447
17448         (TypeContainer.DefineType): call NamespaceClash.
17449
17450         * interface.cs (Interface.DefineType): use NamespaceClash before
17451         defining the type.
17452
17453         * delegate.cs (Delegate.DefineType): use NamespaceClash before
17454         defining the type.
17455
17456         * enum.cs: (Enum.DefineType): use NamespaceClash before
17457         defining the type.
17458
17459         * typemanager.cs (: 3-line patch that gives us some tasty 11%
17460         speed increase.  First, use the negative_hits cache when we get a
17461         negative.  Second, add the type with its full original name
17462         instead of the new . and + encoded name (reflection uses + to
17463         separate type from a nested type).  Use LookupTypeReflection
17464         directly which bypasses the type->name hashtable (that we already
17465         know does not contain the type.
17466
17467         * decl.cs (DeclSpace.ResolveTypeExpr): track the
17468         location/container type. 
17469
17470         * driver.cs: When passing utf8, use directly the UTF8Encoding.
17471
17472 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
17473
17474         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
17475
17476         * delegate.cs (NewDelegate.Resolve): Test whether an instance
17477         method is being referenced in the method group from a static
17478         context, and report error 120 if so.
17479
17480         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
17481         Error118. 
17482
17483         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
17484         is created, we create the A namespace).
17485
17486         * cs-parser.jay: A namespace also introduces a DeclarationFound.
17487         Fixes #41591
17488
17489 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
17490
17491         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
17492         invocation to ModuleBuilder.GetType with the same values will
17493         return a new type instance, so we need to cache its return
17494         values. 
17495
17496         * expression.cs (Binary.ResolveOperator): Only allow the compare
17497         operators on enums if they are of the same type.
17498
17499         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
17500         types of ValueType on their own case.  Before we were giving them
17501         the same treatment as objects.
17502
17503         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
17504         fullname.  Short name is used to compare against container name.
17505         Fullname is used to check against defined namespace names.
17506
17507         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
17508         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
17509
17510         (Method.CheckBase): Call parent.
17511         (MemberBase.CheckBase): Check for protected members on sealed
17512         classes.
17513         (PropertyBase.CheckBase): Call parent.
17514         (Field.Define): Call parent.
17515
17516         * report.cs: Negative error codes are now mapped to 8000 - code,
17517         so that the display is render more nicely.
17518
17519         * typemanager.cs: Do not use try/catch, instead report a regular
17520         error. 
17521
17522         (GetPointerType, GetReferenceType): These methods provide
17523         mechanisms to obtain the T* and T& from a T.  We had the code
17524         previously scattered around the code base, and it also used
17525         TypeManager.LookupType that would go through plenty of caches.
17526         This one goes directly to the type source.
17527
17528         In some places we did the Type.GetType followed by
17529         ModuleBuilder.GetType, but not in others, so this unifies the
17530         processing as well.
17531
17532         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
17533         statements now that we have namespace information.
17534
17535         * typemanager.cs (IsNamespace): New method, returns whether the
17536         string presented is a namespace or not.
17537
17538         (ComputeNamespaces): New public entry point, computes the list of
17539         available namespaces, using the GetNamespaces API call in Mono, or
17540         the slower version in MS.NET.   
17541
17542         Now before we start the semantic analysis phase, we have a
17543         complete list of namespaces including everything that the user has
17544         provided.
17545
17546         Deleted old code to cache namespaces in .nsc files.
17547
17548 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
17549
17550         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
17551         class/struct location definition Location for the implicit
17552         constructor location.
17553
17554         (Operator.Define): Use the location of the operator for the
17555         implicit Method definition.
17556
17557         (Constructor.Emit): use the constructor location for the implicit
17558         base initializer constructor.
17559
17560         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
17561         and the Expression class now contains two new methods:
17562
17563         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
17564         isolate type lookup from the rest of the resolution process.
17565
17566         Since we use Expressions to hold type definitions due to the way
17567         we parse the input we have historically overloaded Resolve to
17568         perform the Type lookups if a special flag is passed.  Now this is
17569         eliminated and two methods take their place. 
17570
17571         The differences in the two methods between xStep and xTerminal is
17572         that xStep is involved in our current lookup system that uses
17573         SimpleNames to compose a name, while xTerminal is used just to
17574         catch the case where the simplename lookup failed.
17575
17576 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
17577
17578         * expression.cs (ResolveMemberAccess): Remove redundant code.
17579         TypeExpr expressions are always born fully resolved.
17580
17581         * interface.cs (PopulateMethod): Do not lookup the types twice.
17582         We were doing it once during SemanticAnalysis and once during
17583         PopulateMethod.
17584
17585         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
17586         in local variable type definitions, were being returned as a
17587         SimpleName (we decomposed everything into a string), that is
17588         because primary_expression was being used instead of a type in the
17589         grammar (reduce/reduce conflicts).
17590
17591         The part that was wrong is that we converted the expression into a
17592         string (an oversimplification in one hand, compounded with primary
17593         expressions doing string concatenation).
17594
17595         So things like:
17596
17597         A.B.C [] x;
17598
17599         Would return "A.B.C[]" as a SimpleName.  This stopped things like
17600         using clauses from working on this particular context.  And a type
17601         was being matched directly against "A.B.C[]".
17602
17603         We now use the correct approach, and allow for ComposedCast to be
17604         part of the unary expression.  So the "A.B.C []" become a composed
17605         cast of "A.B.C" (as a nested group of MemberAccess with a
17606         SimpleName at the end) plus the rank composition "[]". 
17607
17608         Also fixes 35567
17609
17610 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
17611
17612         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
17613         for the access level checking.
17614
17615         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
17616         `TypeContainer container', because I kept getting confused when I
17617         was debugging this code.
17618
17619         * expression.cs (Indexers): Instead of tracking getters/setters,
17620         we now track them in parallel.  We create one arraylist less, but
17621         most importantly it is possible now for the LValue code to find a
17622         matching get for a set.
17623
17624         (IndexerAccess.DoResolveLValue): Update the code.
17625         GetIndexersForType has been modified already to extract all the
17626         indexers from a type.  The code assumed it did not.
17627
17628         Also make the code set the correct return type for the indexer.
17629         This was fixed a long time ago for properties, but was missing for
17630         indexers.  It used to be void_type.
17631
17632         (Binary.Emit): Test first for doubles instead of
17633         floats, as they are more common.
17634
17635         (Binary.EmitBranchable): Use the .un version of the branch opcodes
17636         when dealing with floats and the <=, >= operators.  This fixes bug
17637         #39314 
17638
17639         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
17640         to load the array value by emitting a load on the foreach variable
17641         type.  This was incorrect.  
17642
17643         We now emit the code to load an element using the the array
17644         variable type, and then we emit the conversion operator.
17645
17646         Fixed #40176
17647
17648 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
17649
17650         * attribute.cs: Avoid allocation of ArrayLists in the common case.
17651
17652 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
17653
17654         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
17655         test for protection before we test for signatures. 
17656
17657         (MethodSignature.ToString): implement.
17658
17659         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
17660         to the case where we reduced into a LongConstant.
17661
17662         * decl.cs (CheckAccessLevel): If the type is an array, we can not
17663         depend on whether the information is acurrate, because the
17664         Microsoft runtime will always claim that the array type is public,
17665         regardless of the real state.
17666
17667         If the type is a pointer, another problem happens: the type is
17668         reported as non-public in Microsoft.  
17669
17670         In both cases we have to call CheckAccessLevel recursively with
17671         the underlying type as the argument to be tested.
17672
17673 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
17674
17675         * assign.cs (Assign.Emit): If we are dealing with a compound
17676         assignment expression, we should use the code path that stores the
17677         intermediate result in a temporary value.  This fixes #40903.
17678
17679         *expression.cs (Indirection.ToString): Provide ToString method for
17680         debugging. 
17681
17682 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
17683
17684         * class.cs: Null out fields holding references to Block objects so
17685         they can be garbage collected.
17686
17687         * expression.cs (OverloadResolve): Remove unused local.
17688
17689 2003-04-07  Martin Baulig  <martin@ximian.com>
17690
17691         * codegen.cs (EmitContext.CurrentFile): New public field.
17692         (EmitContext.Mark): Use the CurrentFile to check whether the
17693         location is in the correct file.
17694         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
17695
17696 2003-04-07  Martin Baulig  <martin@ximian.com>
17697
17698         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
17699
17700         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
17701         location.  [FIXME: The location argument which gets passed to this
17702         method is sometimes wrong!]
17703
17704 2003-04-07  Nick Drochak <ndrochak@gol.com>
17705
17706         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
17707
17708 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
17709
17710         * expression.cs (Indirection.EmitAssign): We were using the
17711         temporary, but returning immediately instead of continuing the
17712         EmitAssing flow.
17713
17714 2003-04-06  Martin Baulig  <martin@ximian.com>
17715
17716         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
17717         if it's a nested child, but also deriving from the outer class.
17718         See test 190.cs.
17719
17720         * typemanager.cs (IsNestedChildOf): Make this work if it's a
17721         nested child, but also deriving from the outer class.  See
17722         test-190.cs.
17723         (FilterWithClosure): We may access private members of the outer
17724         class if we're a nested child and deriving from the outer class.
17725         (RealMemberLookup): Only set `closure_private_ok' if the
17726         `original_bf' contained BindingFlags.NonPublic.
17727
17728 2003-04-05  Martin Baulig  <martin@ximian.com>
17729
17730         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
17731
17732 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
17733
17734         * class.cs (Event.Define): Do not allow abstract events to have
17735         initializers. 
17736
17737 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
17738
17739         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
17740         block in event declarations.
17741
17742         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
17743         value type, get its address.
17744
17745         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
17746         leaving a class on the stack instead of a boolean value (int
17747         0/1).  Change the code so we compare against null, and then the
17748         result against zero.
17749
17750         * class.cs (TypeContainer.GetClassBases): We were checking for the
17751         parent class being sealed too late.
17752
17753         * expression.cs (Binary.Emit): For <= and >= when dealing with
17754         floating point values, use cgt.un and clt.un instead of cgt and
17755         clt alone.
17756
17757 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
17758
17759         * statement.cs: Apply the same optimization as MS: skip the 
17760         GetEnumerator returning an IEnumerator, and use the one returning a 
17761         CharEnumerator instead. This allows us to avoid the try-finally block 
17762         and the boxing.
17763
17764 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
17765
17766         * cs-parser.jay: Attributes cannot be applied to
17767                          namespaces. Fixes #40473
17768
17769 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17770
17771         * class.cs:
17772         (Add*): check if the name is valid using the full name for constants,
17773         fields, properties and events.
17774
17775 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
17776
17777         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
17778         char constants to be part of the enumeration.
17779
17780         * expression.cs (Conditional.DoResolve): Add support for operator
17781         true. Implements the missing functionality from 14.12
17782
17783         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
17784         operator true/false as required by the spec.
17785
17786         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
17787         implicit conversion to boolean.
17788
17789         * statement.cs (Statement.ResolveBoolean): A boolean expression is
17790         also one where the type implements `operator true'. 
17791
17792         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
17793         get an expression that will invoke operator true based on an
17794         expression.  
17795
17796         (GetConversionOperators): Removed the hack that called op_True
17797         here.  
17798
17799         (Expression.ResolveBoolean): Move this from Statement.
17800
17801 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
17802
17803         * ecore.cs (FieldExpr): do not allow initialization of initonly
17804         fields on derived classes
17805
17806 2003-03-13  Martin Baulig  <martin@ximian.com>
17807
17808         * statement.cs (Block.Emit): Call ig.BeginScope() and
17809         ig.EndScope() when compiling with debugging info; call
17810         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
17811
17812 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
17813
17814         * expression.cs (Indexers): Do not construct immediately, allow
17815         for new members to be appended as we go.  Fixes 38143
17816
17817 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17818
17819         * expression.cs: save/restore context when resolving an unchecked
17820         expression.
17821
17822 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
17823
17824         * cfold.cs: Catch division by zero in modulus operator during
17825         constant folding.
17826
17827 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
17828
17829         * interface.cs (Interface.DefineMembers): Avoid defining members
17830         twice. 
17831
17832 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
17833
17834         * driver.cs: handle the +/- options for -noconfig
17835
17836         * statement.cs (Unckeched.Resolve): Also track the state of
17837         unchecked in the Resolve phase.
17838
17839 2003-02-27  Martin Baulig  <martin@ximian.com>
17840
17841         * ecore.cs (Expression.MemberLookup): Don't create a
17842         MethodGroupExpr for something which is not a method.  Fixes #38291.
17843
17844 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
17845
17846         * class.cs (MemberBase.CheckParameters): Also check that the type
17847         is unmanaged if it is a pointer.
17848
17849         * expression.cs (SizeOf.Resolve): Add location information.
17850
17851         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
17852         a managed type is declared.
17853
17854         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
17855         parameter modifiers as well.  Fixes bug 38606
17856
17857         * class.cs: Very sad.  Am backing out the speed up changes
17858         introduced by the ArrayList -> Array in the TypeContainer, as they
17859         were not actually that much faster, and introduced a bug (no error
17860         reports on duplicated methods).
17861
17862         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
17863         source first, this will guarantee that we have a valid expression
17864         before calling in lower levels functions that will require a
17865         resolved object.  Then use this original_source in the
17866         target.ResolveLValue instead of the original source that was
17867         passed to us.
17868
17869         Another change.  Use target.Resolve instead of LValueResolve.
17870         Although we are resolving for LValues, we will let the Assign code
17871         take care of that (it will be called again from Resolve).  This
17872         basically allows code like this:
17873
17874         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
17875         class Y { void A (X x) { x [0] += o; }
17876
17877         The problem was that the indexer was trying to resolve for
17878         set_Item (idx, object o) and never finding one.  The real set_Item
17879         was set_Item (idx, X).  By delaying the process we get the right
17880         semantics. 
17881
17882         Fixes bug 36505
17883
17884 2003-02-23  Martin Baulig  <martin@ximian.com>
17885
17886         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
17887         while calling DoEmit ().
17888
17889         * codegen.cs (EmitContext.Mark): Don't mark locations in other
17890         source files; if you use the #line directive inside a method, the
17891         compiler stops emitting line numbers for the debugger until it
17892         reaches the end of the method or another #line directive which
17893         restores the original file.
17894
17895 2003-02-23  Martin Baulig  <martin@ximian.com>
17896
17897         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
17898
17899 2003-02-23  Martin Baulig  <martin@ximian.com>
17900
17901         * statement.cs (Block.AddChildVariableNames): We need to call this
17902         recursively, not just for our immediate children.
17903
17904 2003-02-23  Martin Baulig  <martin@ximian.com>
17905
17906         * class.cs (Event.Define): Always make the field private, like csc does.
17907
17908         * typemanager.cs (TypeManager.RealMemberLookup): Make events
17909         actually work, fixes bug #37521.
17910
17911 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
17912
17913         * delegate.cs: When creating the various temporary "Parameters"
17914         classes, make sure that we call the ComputeAndDefineParameterTypes
17915         on those new parameters (just like we do with the formal ones), to
17916         allow them to be resolved in the context of the DeclSpace.
17917
17918         This fixes the bug that Dick observed in Bugzilla #38530.
17919
17920 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
17921
17922         * expression.cs (ResolveMemberAccess): When resolving a constant,
17923         do not attempt to pull a constant if the value was not able to
17924         generate a valid constant.
17925
17926         * const.cs (LookupConstantValue): Do not report more errors than required.
17927
17928 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17929
17930         * expression.cs: fixes bug #38328.
17931
17932 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
17933
17934         * class.cs: Changed all the various members that can be part of a
17935         class from being an ArrayList to be an Array of the right type.
17936         During the DefineType type_list, interface_list, delegate_list and
17937         enum_list are turned into types, interfaces, delegates and enums
17938         arrays.  
17939
17940         And during the member population, indexer_list, event_list,
17941         constant_list, field_list, instance_constructor_list, method_list,
17942         operator_list and property_list are turned into their real arrays.
17943
17944         Although we could probably perform this operation earlier, for
17945         good error reporting we need to keep the lists and remove the
17946         lists for longer than required.
17947
17948         This optimization was triggered by Paolo profiling the compiler
17949         speed on the output of `gen-sample-program.pl' perl script. 
17950
17951         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
17952         not crash in methods like MemberLookupFailed that use this field.  
17953
17954         This problem arises when the compiler fails to resolve a type
17955         during interface type definition for example.
17956
17957 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
17958
17959         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
17960         inherit from System.Object, so we have to stop at null, not only
17961         when reaching System.Object.
17962
17963 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
17964
17965         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
17966         DeclaredOnly because the parent indexer might have had a different
17967         name, but did not loop until the top of the hierarchy was reached.
17968
17969         The problem this one fixes is 35492: when a class implemented an
17970         indexer from an interface, we were getting the interface method
17971         (which was abstract) and we were flagging an error (can not invoke
17972         abstract method).
17973
17974         This also keeps bug 33089 functioning, and test-148 functioning.
17975
17976         * typemanager.cs (IsSpecialMethod): The correct way of figuring
17977         out if a method is special is to see if it is declared in a
17978         property or event, or whether it is one of the predefined operator
17979         names.   This should fix correctly #36804.
17980
17981 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
17982
17983         The goal here is to remove the dependency on EmptyCast.Peel ().
17984         Killing it completely.
17985
17986         The problem is that currently in a number of places where
17987         constants are expected, we have to "probe" for an EmptyCast, and
17988         Peel, which is not the correct thing to do, as this will be
17989         repetitive and will likely lead to errors. 
17990
17991         The idea is to remove any EmptyCasts that are used in casts that
17992         can be reduced to constants, so we only have to cope with
17993         constants. 
17994
17995         This bug hunt was triggered by Bug 37363 and the desire to remove
17996         the duplicate pattern where we were "peeling" emptycasts to check
17997         whether they were constants.  Now constants will always be
17998         constants.
17999
18000         * ecore.cs: Use an enumconstant here instead of wrapping with
18001         EmptyCast.  
18002
18003         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
18004         throwing me off.  By handling this we can get rid of a few hacks.
18005
18006         * statement.cs (Switch): Removed Peel() code.
18007
18008 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
18009
18010         * class.cs: Location information for error 508
18011
18012         * expression.cs (New.DoResolve): Add a guard against double
18013         resolution of an expression.  
18014
18015         The New DoResolve might be called twice when initializing field
18016         expressions (see EmitFieldInitializers, the call to
18017         GetInitializerExpression will perform a resolve on the expression,
18018         and later the assign will trigger another resolution
18019
18020         This leads to bugs (#37014)
18021
18022         * delegate.cs: The signature for EndInvoke should contain any ref
18023         or out parameters as well.  We were not doing this in the past. 
18024
18025         * class.cs (Field.Define): Do not overwrite the type definition
18026         inside the `volatile' group.  Turns out that volatile enumerations
18027         were changing the type here to perform a validity test, which
18028         broke conversions. 
18029
18030 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
18031
18032         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
18033         and structs, we do not want to load the instance variable
18034
18035         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
18036         enum_type has to be handled like an object reference (implicit
18037         conversions exists from this to object), but the regular IsClass
18038         and IsValueType tests will never return true for this one.
18039
18040         Also we use TypeManager.IsValueType instead of type.IsValueType,
18041         just for consistency with the rest of the code (this is only
18042         needed if we ever use the construct exposed by test-180.cs inside
18043         corlib, which we dont today).
18044
18045 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
18046
18047         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
18048         just InternalCall.
18049
18050 2003-02-09  Martin Baulig  <martin@ximian.com>
18051
18052         * namespace.cs (Namespace..ctor): Added SourceFile argument.
18053         (Namespace.DefineNamespaces): New static public method; this is
18054         called when we're compiling with debugging to add all namespaces
18055         to the symbol file.
18056
18057         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
18058         pass it to the Namespace's .ctor.
18059
18060         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
18061         and MethodBase arguments; pass the namespace ID to the symwriter;
18062         pass the MethodBase instead of the token to the symwriter.
18063         (SymbolWriter.DefineNamespace): New method to add a namespace to
18064         the symbol file.
18065
18066 2003-02-09  Martin Baulig  <martin@ximian.com>
18067
18068         * symbolwriter.cs: New file.  This is a wrapper around
18069         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
18070         methods here in near future.
18071
18072 2003-02-09  Martin Baulig  <martin@ximian.com>
18073
18074         * codegen.cs (EmitContext.Mark): Just pass the arguments to
18075         ILGenerator.MarkSequencePoint() which are actually used by the
18076         symbol writer.
18077
18078 2003-02-09  Martin Baulig  <martin@ximian.com>
18079
18080         * location.cs (SourceFile): New public sealed class.  This
18081         contains the name and an index which is used in the location's token.
18082         (Location): Reserve an appropriate number of bits in the token for
18083         the source file instead of walking over that list, this gives us a
18084         really huge performance improvement when compiling with debugging.
18085
18086         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
18087         `SourceFile' argument instead of a string.
18088         (Driver.ProcessFile): Add all the files via Location.AddFile(),
18089         but don't parse/tokenize here, we need to generate the list of all
18090         source files before we do that.
18091         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
18092         the files.
18093
18094         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
18095         instead of a string.
18096
18097         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
18098         of a string.
18099
18100 2003-02-09  Martin Baulig  <martin@ximian.com>
18101
18102         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
18103         filename on `#line default'.
18104
18105 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
18106
18107         * statement.cs: don't clear the pinned var when the fixed statement
18108         returns from the method (fixes bug#37752).
18109
18110 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
18111
18112         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
18113         to IsValueType.
18114
18115 2003-02-07  Martin Baulig  <martin@ximian.com>
18116
18117         * driver.cs: Removed the `--debug-args' command line argument.
18118
18119         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
18120         automatically by the AsssemblyBuilder.
18121         (CodeGen.InitializeSymbolWriter): We don't need to call any
18122         initialization function on the symbol writer anymore.  This method
18123         doesn't take any arguments.
18124
18125 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
18126
18127         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
18128         from referenced assemblies as well.
18129
18130 2003-02-02  Martin Baulig  <martin@ximian.com>
18131
18132         * class.cs (MethodData.Emit): Generate debugging info for external methods.
18133
18134 2003-02-02  Martin Baulig  <martin@ximian.com>
18135
18136         * class.cs (Constructor.Emit): Open the symbol writer before
18137         emitting the constructor initializer.
18138         (ConstructorInitializer.Emit): Call ec.Mark() to allow
18139         single-stepping through constructor initializers.
18140
18141 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
18142
18143         * class.cs: Handle error 549: do not allow virtual methods in
18144         sealed classes. 
18145
18146 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
18147
18148         * decl.cs: Check access levels when resolving types
18149
18150 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
18151
18152         * statement.cs: Add parameters and locals set in catch blocks that might 
18153         return to set vector
18154
18155 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
18156
18157         * class.cs (Operator): Set the SpecialName flags for operators.
18158
18159         * expression.cs (Invocation.DoResolve): Only block calls to
18160         accessors and operators on SpecialName methods.
18161
18162         (Cast.TryReduce): Handle conversions from char constants.
18163
18164
18165 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
18166
18167         * statement.cs: small memory and time optimization in FlowBranching.
18168
18169 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
18170
18171         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
18172         problem that the last fix but in the other sid (Set).
18173
18174         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
18175         access when there is no indexer in the hierarchy.
18176
18177 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
18178
18179         * class.cs: Combine some if statements.
18180
18181 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18182
18183         * driver.cs: fixed bug #37187.
18184
18185 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
18186
18187         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
18188         any indexer, it's needed to build a list with all the indexers in the
18189         hierarchy (AllGetters), else we have problems. Fixes #35653.
18190
18191 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
18192
18193         * class.cs (MethodData.Define): It is wrong for an interface
18194         implementation to be static in both cases: explicit and implicit.
18195         We were only handling this in one case.
18196
18197         Improve the if situation there to not have negations.
18198
18199         * class.cs (Field.Define): Turns out that we do not need to check
18200         the unsafe bit on field definition, only on usage.  Remove the test.
18201
18202 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18203
18204         * driver.cs: use assembly.Location instead of Codebase (the latest
18205         patch made mcs fail when using MS assemblies).
18206
18207 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
18208
18209         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
18210         get the path to *corlib.dll.
18211
18212 2003-01-21  Nick Drochak <ndrochak@gol.com>
18213
18214         * cs-tokenizer.cs:
18215         * pending.cs:
18216         * typemanager.cs: Remove compiler warnings
18217
18218 2003-01-20  Duncan Mak  <duncan@ximian.com>
18219
18220         * AssemblyInfo.cs: Bump the version number to 0.19.
18221
18222 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18223
18224         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
18225
18226 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
18227
18228         * class.cs (Constructor::Emit): Emit debugging info for constructors.
18229
18230 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
18231
18232         * cs-parser.jay: Small fix: we were not comparing the constructor
18233         name correctly.   Thanks to Zoltan for the initial pointer.
18234
18235 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
18236
18237         * cs-tokenizer.cs: Set file name when specified with #line
18238
18239 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
18240
18241         * cs-parser.jay: Only perform the constructor checks here if we
18242         are named like the class;  This will help provider a better
18243         error.  The constructor path is taken when a type definition is
18244         not found, but most likely the user forgot to add the type, so
18245         report that rather than the constructor error.
18246
18247 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
18248
18249         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
18250         allocations.
18251
18252 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
18253
18254         * cs-parser.jay: Add cleanup call.
18255
18256 2003-01-13  Duncan Mak  <duncan@ximian.com>
18257
18258         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
18259         consistent with other methods.
18260
18261 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
18262
18263         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
18264
18265 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
18266
18267         * attribute.cs: only set GuidAttr to true when we have a
18268         GuidAttribute.
18269
18270 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18271
18272         * ecore.cs:
18273         * expression.cs:
18274         * typemanager.cs: fixes to allow mcs compile corlib with the new
18275         Type.IsSubclassOf fix.
18276
18277 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
18278
18279         * expression.cs (LocalVariableReference.DoResolve): Classify a
18280         constant as a value, not as a variable.   Also, set the type for
18281         the variable.
18282
18283         * cs-parser.jay (fixed_statement): take a type instead of a
18284         pointer_type, so we can produce a better error message later.
18285
18286         * statement.cs (Fixed.Resolve): Flag types that are not pointers
18287         as an error.  
18288
18289         (For.DoEmit): Make inifinite loops have a
18290         non-conditional branch back.
18291
18292         (Fixed.DoEmit): First populate the pinned variables, then emit the
18293         statement, then clear the variables.  Before I was emitting the
18294         code once for each fixed piece.
18295
18296
18297 2003-01-08  Martin Baulig  <martin@ximian.com>
18298
18299         * statement.cs (FlowBranching.MergeChild): A break in a
18300         SWITCH_SECTION does not leave a loop.  Fixes #36155.
18301
18302 2003-01-08  Martin Baulig  <martin@ximian.com>
18303
18304         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
18305         lives in the same number space than `param_map'.  Fixes #36154.
18306
18307 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
18308
18309         * cs-parser.jay (constructor_declaration): Set the
18310         Constructor.ModFlags before probing for it.  This makes the
18311         compiler report 514, 515 and 132 (the code was there, but got
18312         broken). 
18313
18314         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
18315         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
18316         (GotoCase.Resolve): Set `Returns' to ALWAYS.
18317
18318 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
18319
18320         * enum.cs: create the enum static fields using the enum type.
18321
18322 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
18323
18324         * class.cs: don't try to create the ParamBuilder for the return
18325         type if it's not needed (and handle it breaking for the ms runtime
18326         anyway).
18327
18328 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
18329
18330         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
18331
18332 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
18333
18334         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
18335         the command.   This showed up while compiling the JANET source
18336         code, which used \r as its only newline separator.
18337
18338 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
18339
18340         * class.cs (Method.Define): If we are an operator (because it
18341         reuses our code), then set the SpecialName and HideBySig.  #36128
18342
18343 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
18344
18345         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
18346         exception, report error 120 `object reference required'.
18347
18348         * driver.cs: Add --pause option, used during to measure the size
18349         of the process as it goes with --timestamp.
18350
18351         * expression.cs (Invocation.DoResolve): Do not allow methods with
18352         SpecialName to be invoked.
18353
18354 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
18355
18356         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
18357         number before adding it.
18358
18359 2002-12-21  Ravi Pratap  <ravi@ximian.com>
18360
18361         * ecore.cs (StandardImplicitConversion): When in an unsafe
18362         context, we allow conversion between void * to any other pointer
18363         type. This fixes bug #35973.
18364
18365 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
18366
18367         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
18368         is not thrown when extensionless outputs are used 
18369
18370 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18371
18372         * rootcontext.cs: fixed compilation of corlib.
18373
18374 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
18375
18376         * attribute.cs (Attributes.Contains): Add new method.
18377
18378         * class.cs (MethodCore.LabelParameters): if the parameter is an
18379         `out' parameter, check that no attribute `[In]' has been passed.
18380
18381         * enum.cs: Handle the `value__' name in an enumeration.
18382
18383 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
18384
18385         * decl.cs: Added special case to allow overrides on "protected
18386         internal" methods
18387
18388 2002-12-18  Ravi Pratap  <ravi@ximian.com>
18389
18390         * attribute.cs (Attributes.AddAttributeSection): Rename to this
18391         since it makes much more sense.
18392
18393         (Attributes.ctor): Don't require a Location parameter.
18394
18395         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
18396
18397         * attribute.cs (ApplyAttributes): Remove extra Location parameters
18398         since we already have that information per attribute.
18399
18400         * everywhere : make appropriate changes.
18401
18402         * class.cs (LabelParameters): Write the code which actually
18403         applies attributes to the return type. We can't do this on the MS
18404         .NET runtime so we flag a warning in the case an exception is
18405         thrown.
18406
18407 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
18408
18409         * const.cs: Handle implicit null conversions here too.
18410
18411 2002-12-17  Ravi Pratap  <ravi@ximian.com>
18412
18413         * class.cs (MethodCore.LabelParameters): Remove the extra
18414         Type [] parameter since it is completely unnecessary. Instead
18415         pass in the method's attributes so that we can extract
18416         the "return" attribute.
18417
18418 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
18419
18420         * cs-parser.jay (parse): Use Report.Error to flag errors instead
18421         of ignoring it and letting the compile continue.
18422
18423         * typemanager.cs (ChangeType): use an extra argument to return an
18424         error condition instead of throwing an exception.
18425
18426 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
18427
18428         * expression.cs (Unary.TryReduce): mimic the code for the regular
18429         code path.  Perform an implicit cast in the cases where we can
18430         implicitly convert to one of the integral types, and then reduce
18431         based on that constant.   This fixes bug #35483.
18432
18433 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18434
18435         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
18436
18437 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18438
18439         * namespace.cs: fixed bug #35489.
18440
18441 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
18442
18443         * class.cs: Remove some dead code.
18444
18445         * cs-parser.jay: Estimate the number of methods needed
18446         (RootContext.MethodCount);
18447
18448         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
18449         numbers instead of StringBuilders.
18450
18451         * support.cs (PtrHashtable): Add constructor with initial size;
18452         We can now reduce reallocations of the method table.
18453
18454 2002-12-10  Ravi Pratap  <ravi@ximian.com>
18455
18456         * attribute.cs (ApplyAttributes): Keep track of the emitted
18457         attributes on a per-target basis. This fixes bug #35413.
18458
18459 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
18460
18461         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
18462         default to the Windows 1252 encoding.
18463
18464         (UnixParseOption): Support version, thanks to Alp for the missing
18465         pointer. 
18466
18467         * AssemblyInfo.cs: Add nice assembly information.
18468
18469         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
18470         (bug 35169).
18471
18472         * cs-parser.jay: Allow a trailing comma before the close bracked
18473         in the attribute_section production.
18474
18475         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
18476         address of the instance was being taken, I will take this out,
18477         because we take the address of the object immediately here.
18478
18479 2002-12-09  Ravi Pratap  <ravi@ximian.com>
18480
18481         * typemanager.cs (AreMultipleAllowed): Take care of the most
18482         obvious case where attribute type is not in the current assembly -
18483         stupid me ;-)
18484
18485 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
18486
18487         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
18488         definitions, instead of doing that afterwards.  
18489
18490         Also we use a nice little hack, depending on the constructor, we
18491         know if we are a "composed" name or a simple name.  Hence, we
18492         avoid the IndexOf test, and we avoid 
18493
18494         * codegen.cs: Add code to assist in a bug reporter to track down
18495         the source of a compiler crash. 
18496
18497 2002-12-07  Ravi Pratap  <ravi@ximian.com>
18498
18499         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
18500         types have been emitted for a given element and flag an error
18501         if something which does not have AllowMultiple set is used more
18502         than once.
18503
18504         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
18505         attribute types and their corresponding AllowMultiple properties
18506
18507         (AreMultipleAllowed): Check the property for a given type.
18508
18509         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
18510         property in the case we have a TypeContainer.
18511
18512         (Attributes.AddAttribute): Detect duplicates and just skip on
18513         adding them. This trivial fix catches a pretty gross error in our
18514         attribute emission - global attributes were being emitted twice!
18515
18516         Bugzilla bug #33187 is now fixed.
18517
18518 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
18519
18520         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
18521         instead of pp_and).
18522
18523         * expression.cs (Binary.ResolveOperator): I can only use the
18524         Concat (string, string, string) and Concat (string, string,
18525         string, string) if the child is actually a concatenation of
18526         strings. 
18527
18528 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
18529
18530         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
18531         context where we need a 2-character lookahead.
18532
18533         * pending.cs (PendingImplementation): Rework so we can keep track
18534         of interface types all the time, and flag those which were
18535         implemented by parents as optional.
18536
18537 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
18538
18539         * expression.cs (Binary.ResolveOperator): Use
18540         String.Concat(string,string,string) or
18541         String.Concat(string,string,string,string) when possible. 
18542
18543         * typemanager: More helper methods.
18544
18545
18546 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
18547
18548         * pending.cs: remove the bogus return from GetMissingInterfaces()
18549         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
18550
18551 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18552
18553         * namespace.cs: avoid duplicated 'using xxx' being added to
18554         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
18555         when we get more than one 'using' statement for the same namespace.
18556         Report a CS0105 warning for it.
18557
18558 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
18559
18560         * cs-tokenizer.cs (consume_identifier): use read directly, instead
18561         of calling getChar/putback, uses internal knowledge of it.    
18562
18563         (xtoken): Reorder tokenizer so most common patterns are checked
18564         first.  This reduces the compilation time in another 5% (from 8.11s
18565         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
18566
18567         The parsing time is 22% of the compilation in mcs, and from that
18568         64% is spent on the tokenization process.  
18569
18570         I tried using a binary search for keywords, but this is slower
18571         than the hashtable.  Another option would be to do a couple of
18572         things:
18573
18574                 * Not use a StringBuilder, instead use an array of chars,
18575                   with a set value.  Notice that this way we could catch
18576                   the 645 error without having to do it *afterwards*.
18577
18578                 * We could write a hand-parser to avoid the hashtable
18579                   compares altogether.
18580
18581         The identifier consumption process takes 37% of the tokenization
18582         time.  Another 15% is spent on is_number.  56% of the time spent
18583         on is_number is spent on Int64.Parse:
18584
18585                 * We could probably choose based on the string length to
18586                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
18587                   computations. 
18588
18589         Another 3% is spend on wrapping `xtoken' in the `token' function.
18590
18591         Handle 0xa0 as whitespace (#34752)
18592
18593 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
18594
18595         * typemanager.cs (IsCLRType): New routine to tell whether a type
18596         is one of the builtin types.  
18597
18598         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
18599         typecode in more places instead of doing pointer comparissions.
18600         We could leverage some knowledge about the way the typecodes are
18601         laid out.
18602
18603         New code to cache namespaces in assemblies, it is currently not
18604         invoked, to be used soon.
18605
18606         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
18607
18608         * expression.cs (Binary.ResolveOperator): specially handle
18609         strings, and do not perform user-defined operator overloading for
18610         built-in types.
18611
18612 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
18613
18614         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
18615         internalcall as it is a pretty simple operation;  Avoid whenever
18616         possible to call Char.IsLetter.
18617
18618         (consume_identifier): Cut by half the number of
18619         hashtable calls by merging the is_keyword and GetKeyword behavior.
18620
18621         Do not short-circuit, because if we do, we
18622         report errors (ie, #if false && true would produce an invalid
18623         directive error);
18624
18625
18626 2002-11-24  Martin Baulig  <martin@ximian.com>
18627
18628         * expression.cs (Cast.TryReduce): If we're in checked syntax,
18629         check constant ranges and report a CS0221.  Fixes #33186.
18630
18631 2002-11-24  Martin Baulig  <martin@ximian.com>
18632
18633         * cs-parser.jay: Make this work for uninitialized variable
18634         declarations in the `for' initializer.  Fixes #32416.
18635
18636 2002-11-24  Martin Baulig  <martin@ximian.com>
18637
18638         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
18639         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
18640
18641 2002-11-24  Martin Baulig  <martin@ximian.com>
18642
18643         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
18644         argument; if true, we also check for user-defined conversions.
18645         This is only needed if both arguments are of a user-defined type.
18646         Fixes #30443, added test-175.cs.
18647         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
18648
18649         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
18650
18651 2002-11-24  Martin Baulig  <martin@ximian.com>
18652
18653         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
18654         function to get the store opcode.
18655         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
18656         only emit the Ldelema if the store opcode is Stobj.  You must run
18657         both test-34 and test-167 to test this.  Fixes #34529.
18658
18659 2002-11-23  Martin Baulig  <martin@ximian.com>
18660
18661         * ecore.cs (Expression.MemberLookup): Added additional
18662         `qualifier_type' argument which is used when we're being called
18663         from MemberAccess.DoResolve() and null if we're called from a
18664         SimpleName lookup.
18665         (Expression.MemberLookupFailed): New method to report errors; this
18666         does the CS1540 check and reports the correct error message.
18667
18668         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
18669         argument for the CS1540 check and redone the way how we're dealing
18670         with private members.  See the comment in the source code for details.
18671         (FilterWithClosure): Reverted this back to revision 1.197; renamed
18672         `closure_start_type' to `closure_qualifier_type' and check whether
18673         it's not null.  It was not this filter being broken, it was just
18674         being called with the wrong arguments.
18675
18676         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
18677         and pass it the correct `qualifier_type'; this also does the error
18678         handling for us.
18679
18680 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
18681
18682         * expression.cs (Invocation.EmitParams): If the we are dealing
18683         with a non-built-in value type, load its address as well.
18684
18685         (ArrayCreation): Use a a pretty constant instead
18686         of the hardcoded value 2.   Use 6 instead of 2 for the number of
18687         static initializers.  
18688
18689         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
18690         because they are not really value types, just glorified integers. 
18691
18692         * driver.cs: Do not append .exe, the CSC compiler does not do it.
18693
18694         * ecore.cs: Remove redundant code for enumerations, make them use
18695         the same code path as everything else, fixes the casting issue
18696         with enumerations in Windows.Forms.
18697
18698         * attribute.cs: Do only cast to string if it is a string, the
18699         validation happens later.
18700
18701         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
18702         people upgrade their corlibs.
18703
18704         * ecore.cs: Oops, enumerations were not following the entire code path
18705
18706 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
18707
18708         * typemanager.cs (FilterWithClosure): Commented out the test for
18709         1540 in typemanager.cs, as it has problems when accessing
18710         protected methods from a parent class (see test-174.cs). 
18711
18712         * attribute.cs (Attribute.ValidateGuid): new method.
18713         (Attribute.Resolve): Use above.
18714
18715 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
18716
18717         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
18718
18719         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
18720         handling for enumerations, as we only needed the TypeContainer
18721         functionality to begin with (this is required for the fix below to
18722         work for enums that reference constants in a container class for
18723         example). 
18724
18725         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
18726
18727         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
18728         a valid TypeBuilder to perform lookups on.o
18729
18730         * class.cs (InheritableMemberSignatureCompare): Use true in the
18731         call to GetGetMethod and GetSetMethod, because we are comparing
18732         the signature, and we need to get the methods *even* if they are
18733         private. 
18734
18735         (PropertyBase.CheckBase): ditto.
18736
18737         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
18738         GotoCase.Resolve): Use Peel on EmpytCasts.
18739
18740         * ecore.cs (EmptyCast): drop child, add Peel method.
18741
18742 2002-11-17  Martin Baulig  <martin@ximian.com>
18743
18744         * ecore.cs (EmptyCast.Child): New public property.
18745
18746         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
18747         label resolved to an EmptyCast.  Fixes #34162.
18748         (GotoCase.Resolve): Likewise.
18749         (Block.EmitMeta): Likewise.
18750
18751 2002-11-17  Martin Baulig  <martin@ximian.com>
18752
18753         * expression.cs (Invocation.BetterConversion): Prefer int over
18754         uint; short over ushort; long over ulong for integer literals.
18755         Use ImplicitConversionExists instead of StandardConversionExists
18756         since we also need to check for user-defined implicit conversions.
18757         Fixes #34165.  Added test-173.cs.
18758
18759 2002-11-16  Martin Baulig  <martin@ximian.com>
18760
18761         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
18762         with the `true' and `false' literals.  Fixes #33151.
18763
18764 2002-11-16  Martin Baulig  <martin@ximian.com>
18765
18766         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
18767         October 22nd; don't do the cs1540 check for static members.
18768
18769         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
18770         now using our own filter here and doing the cs1540 check again.
18771
18772 2002-11-16  Martin Baulig  <martin@ximian.com>
18773
18774         * support.cs (InternalParameters): Don't crash if we don't have
18775         any fixed parameters.  Fixes #33532.
18776
18777 2002-11-16  Martin Baulig  <martin@ximian.com>
18778
18779         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
18780         when looking up static methods to make this work on Windows.
18781         Fixes #33773.
18782
18783 2002-11-16  Martin Baulig  <martin@ximian.com>
18784
18785         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
18786         a setter rather than using PropertyInfo.CanWrite.
18787
18788 2002-11-15  Nick Drochak  <ndrochak@gol.com>
18789
18790         * class.cs: Allow acces to block member by subclasses. Fixes build
18791         breaker.
18792
18793 2002-11-14  Martin Baulig  <martin@ximian.com>
18794
18795         * class.cs (Constructor.Emit): Added the extern/block check.
18796         Fixes bug #33678.
18797
18798 2002-11-14  Martin Baulig  <martin@ximian.com>
18799
18800         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
18801         iteration while looking for indexers, this is needed because the
18802         indexer may have a different name in our base classes.  Fixed the
18803         error reporting (no indexers at all, not get accessor, no
18804         overloaded match).  Fixes bug #33089.
18805         (IndexerAccess.DoResolveLValue): Likewise.
18806
18807 2002-11-14  Martin Baulig  <martin@ximian.com>
18808
18809         * class.cs (PropertyBase.CheckBase): Make this work for multiple
18810         indexers.  Fixes the first part of bug #33089.
18811         (MethodSignature.InheritableMemberSignatureCompare): Added support
18812         for properties.
18813
18814 2002-11-13  Ravi Pratap  <ravi@ximian.com>
18815
18816         * attribute.cs (Attribute.Resolve): Catch the
18817         NullReferenceException and report it since it isn't supposed to
18818         happen. 
18819
18820 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
18821
18822         * expression.cs (Binary.EmitBranchable): Also handle the cases for
18823         LogicalOr and LogicalAnd that can benefit from recursively
18824         handling EmitBranchable.  The code now should be nice for Paolo.
18825
18826 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
18827
18828         * typemanager.cs (LookupType): Added a negative-hit hashtable for
18829         the Type lookups, as we perform quite a number of lookups on
18830         non-Types.  This can be removed once we can deterministically tell
18831         whether we have a type or a namespace in advance.
18832
18833         But this might require special hacks from our corlib.
18834
18835         * TODO: updated.
18836
18837         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
18838         and double which avoids a conversion from an integer to a double.
18839
18840         * expression.cs: tiny optimization, avoid calling IsConstant,
18841         because it effectively performs the lookup twice.
18842
18843 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
18844
18845         But a bogus return here to keep the semantics of the old code
18846         until the Mono runtime is fixed.
18847
18848         * pending.cs (GetMissingInterfaces): New method used to remove all
18849         the interfaces that are already implemented by our parent
18850         classes from the list of pending methods. 
18851
18852         * interface.cs: Add checks for calls after ResolveTypeExpr.
18853
18854 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
18855
18856         * class.cs (Class.Emit): Report warning 67: event not used if the
18857         warning level is beyond 3.
18858
18859         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
18860         being a NullLiteral.
18861
18862         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
18863         specifiers. 
18864
18865         * class.cs (TypeContainer.GetClassBases): Cover a missing code
18866         path that might fail if a type can not be resolved.
18867
18868         * expression.cs (Binary.Emit): Emit unsigned versions of the
18869         operators. 
18870
18871         * driver.cs: use error 5.
18872
18873 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
18874
18875         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
18876
18877 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
18878
18879         * cs-parser.jay (switch_section): A beautiful patch from Martin
18880         Baulig that fixed 33094.
18881
18882 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
18883
18884         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
18885         Check whether the base is abstract and report an error if so.
18886
18887         * expression.cs (IndexerAccess.DoResolveLValue,
18888         IndexerAccess.DoResolve): ditto. 
18889
18890         (Invocation.DoResolve): ditto.
18891
18892         (Invocation.FullMethodDesc): Improve the report string.
18893
18894         * statement.cs (Block): Eliminate IsVariableDefined as it is
18895         basically just a wrapper for GetVariableInfo.
18896
18897         * ecore.cs (SimpleName): Use new 
18898
18899         * support.cs (ReflectionParamter.ParameterType): We unwrap the
18900         type, as we return the actual parameter ref/unref state on a
18901         different call.
18902
18903 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
18904
18905         * support.cs: Return proper flags REF/OUT fixing the previous
18906         commit.  
18907
18908         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
18909         not used to mean `ref' but `ref or out' in ParameterReference
18910
18911         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
18912         full type signature instead of calling TypeManger.CSharpName
18913         ourselves. 
18914
18915         * support.cs (InternalParameters.ParameterDesc): Do not compare
18916         directly to the modflags, because REF/OUT will actually be bitsets
18917         if set. 
18918
18919         * delegate.cs (VerifyMethod): Check also the modifiers.
18920
18921         * cs-tokenizer.cs: Fix bug where floating point values with an
18922         exponent where a sign was missing was ignored.
18923
18924         * driver.cs: Allow multiple assemblies to be specified in a single
18925         /r: argument
18926
18927 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
18928
18929         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
18930         because identifiers after a parenthesis would end up in this kind
18931         of production, and we needed to desamiguate it for having casts
18932         like:
18933
18934                 (UserDefinedType *) xxx
18935
18936 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
18937
18938         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
18939         we should set on the Bindingflags.NonPublic, but not turn on
18940         private_ok.  private_ok controls whether a Private member is
18941         returned (this is chekced on the filter routine), while the
18942         BindingFlags.NonPublic just controls whether private/protected
18943         will be allowed.   This fixes the problem part of the problem of
18944         private properties being allowed to be used in derived classes.
18945
18946         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
18947         so we can call the children DoResolveLValue method (this will
18948         properly signal errors on lvalue assignments to base properties)
18949
18950         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
18951         getter are null, and we have a property info, we know that this
18952         happened because the lookup failed, so we report an error 122 for
18953         protection level violation.
18954
18955         We also silently return if setter and getter are null in the
18956         resolve functions, this condition only happens if we have flagged
18957         the error before.  This is the other half of the problem. 
18958
18959         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
18960         not have accessibility information, that is why we were returning
18961         true in the filter function in typemanager.cs.
18962
18963         To properly report 122 (property is inaccessible because of its
18964         protection level) correctly, we report this error in ResolveAccess
18965         by failing if both the setter and the getter are lacking (ie, the
18966         lookup failed). 
18967
18968         DoResolve and DoLResolve have been modified to check for both
18969         setter/getter being null and returning silently, the reason being
18970         that I did not want to put the knowledge about this error in upper
18971         layers, like:
18972
18973         int old = Report.Errors;
18974         x = new PropertyExpr (...);
18975         if (old != Report.Errors)
18976                 return null;
18977         else
18978                 return x;
18979
18980         So the property expr is returned, but it is invalid, so the error
18981         will be flagged during the resolve process. 
18982
18983         * class.cs: Remove InheritablePropertySignatureCompare from the
18984         class, as we no longer depend on the property signature to compute
18985         whether it is possible to implement a method or not.
18986
18987         The reason is that calling PropertyInfo.GetGetMethod will return
18988         null (in .NET, in Mono it works, and we should change this), in
18989         cases where the Get Method does not exist in that particular
18990         class.
18991
18992         So this code:
18993
18994         class X { public virtual int A { get { return 1; } } }
18995         class Y : X { }
18996         class Z : Y { public override int A { get { return 2; } } }
18997
18998         Would fail in Z because the parent (Y) would not have the property
18999         defined.  So we avoid this completely now (because the alternative
19000         fix was ugly and slow), and we now depend exclusively on the
19001         method names.
19002
19003         (PropertyBase.CheckBase): Use a method-base mechanism to find our
19004         reference method, instead of using the property.
19005
19006         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
19007         routines are gone now.
19008
19009         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
19010         names, they were incorrectly named.
19011
19012         * cs-tokenizer.cs: Return are more gentle token on failure. 
19013
19014         * pending.cs (PendingImplementation.InterfaceMethod): This routine
19015         had an out-of-sync index variable, which caused it to remove from
19016         the list of pending methods the wrong method sometimes.
19017
19018 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
19019
19020         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
19021         CanWrite, because those refer to this particular instance of the
19022         property, and do not take into account the fact that we can
19023         override single members of a property.
19024
19025         Constructor requires an EmitContext.  The resolution process does
19026         not happen here, but we need to compute the accessors before,
19027         because the resolution does not always happen for properties.
19028
19029         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
19030         subclass, before we did not update this flag, but we did update
19031         bindingflags. 
19032
19033         (GetAccessors): Drop this routine, as it did not work in the
19034         presence of partially overwritten set/get methods. 
19035
19036         Notice that this broke the cs1540 detection, but that will require
19037         more thinking. 
19038
19039 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19040
19041         * class.cs:
19042         * codegen.cs:
19043         * driver.cs: issue a warning instead of an error if we don't support
19044         debugging for the platform. Also ignore a couple of errors that may
19045         arise when trying to write the symbols. Undo my previous patch.
19046
19047 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19048
19049         * driver.cs: ignore /debug switch except for Unix platforms.
19050
19051 2002-10-23  Nick Drochak  <ndrochak@gol.com>
19052
19053         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
19054
19055 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
19056
19057         * driver.cs: Do not make mcs-debug conditional, so we do not break
19058         builds that use it.
19059
19060         * statement.cs (UsageVector.MergeChildren): I would like Martin to
19061         review this patch.  But basically after all the children variables
19062         have been merged, the value of "Breaks" was not being set to
19063         new_breaks for Switch blocks.  I think that it should be set after
19064         it has executed.  Currently I set this to the value of new_breaks,
19065         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
19066         conservative, but I do not understand this code very well.
19067
19068         I did not break anything in the build, so that is good ;-)
19069
19070         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
19071
19072 2002-10-20  Mark Crichton  <crichton@gimp.org>
19073
19074         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
19075
19076 2002-10-20  Nick Drochak  <ndrochak@gol.com>
19077
19078         * cfold.cs: Fixed compile blocker.
19079
19080 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
19081
19082         * driver.cs: I was chekcing the key, not the file.
19083
19084 2002-10-19  Ravi Pratap  <ravi@ximian.com>
19085
19086         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
19087         message that we were generating - we just need to silently return
19088         a null.
19089
19090 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
19091
19092         * class.cs (Event.Define): Change my previous commit, as this
19093         breaks the debugger.  This is a temporary hack, as it seems like
19094         the compiler is generating events incorrectly to begin with.
19095
19096         * expression.cs (Binary.ResolveOperator): Added support for 
19097         "U operator - (E x, E y)"
19098
19099         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
19100         y)".
19101
19102         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
19103         init-only variables, but this path did not take into account that
19104         there might be also instance readonly variables.  Correct this
19105         problem. 
19106
19107         This fixes bug 32253
19108
19109         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
19110         delegates as well.
19111
19112         * driver.cs: Change the extension for modules to `netmodule'
19113
19114         * cs-parser.jay: Improved slightly the location tracking for
19115         the debugger symbols.
19116
19117         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
19118         modifiers that were specified instead of the hardcoded value
19119         (FamAndAssem).  This was basically ignoring the static modifier,
19120         and others.  Fixes 32429.
19121
19122         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
19123         fixed a bug in the process (32476)
19124
19125         * expression.cs (ArrayAccess.EmitAssign): Patch from
19126         hwang_rob@yahoo.ca that fixes bug 31834.3
19127
19128 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
19129
19130         * driver.cs: Make the module extension .netmodule.
19131
19132 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
19133
19134         * driver.cs: Report an error if the resource file is not found
19135         instead of crashing.
19136
19137         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
19138         false, like Emit does.
19139
19140 2002-10-16  Nick Drochak  <ndrochak@gol.com>
19141
19142         * typemanager.cs: Remove unused private member.  Also reported mcs
19143         bug to report this as a warning like csc.
19144
19145 2002-10-15  Martin Baulig  <martin@gnome.org>
19146
19147         * statement.cs (Statement.Emit): Made this a virtual method; emits
19148         the line number info and calls DoEmit().
19149         (Statement.DoEmit): New protected abstract method, formerly knows
19150         as Statement.Emit().
19151
19152         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
19153
19154 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
19155
19156         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
19157         have fixed a remaining problem: not every AddXXXX was adding a
19158         fully qualified name.  
19159
19160         Now everyone registers a fully qualified name in the DeclSpace as
19161         being defined instead of the partial name.  
19162
19163         Downsides: we are slower than we need to be due to the excess
19164         copies and the names being registered this way.  
19165
19166         The reason for this is that we currently depend (on the corlib
19167         bootstrap for instance) that types are fully qualified, because
19168         we dump all the types in the namespace, and we should really have
19169         types inserted into the proper namespace, so we can only store the
19170         basenames in the defined_names array.
19171
19172 2002-10-10  Martin Baulig  <martin@gnome.org>
19173
19174         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
19175         from bug #31834, see the bug report for a testcase which is
19176         miscompiled.
19177
19178 2002-10-10  Martin Baulig  <martin@gnome.org>
19179
19180         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
19181         flow analysis code for this.
19182
19183         * statement.cs (Do, While, For): Tell the flow analysis code about
19184         infinite loops.
19185         (FlowBranching.UsageVector): Added support for infinite loops.
19186         (Block.Resolve): Moved the dead code elimination here and use flow
19187         analysis to do it.
19188
19189 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
19190
19191         * class.cs (Field.Define): Catch cycles on struct type
19192         definitions. 
19193
19194         * typemanager.cs (IsUnmanagedtype): Do not recursively check
19195         fields if the fields are static.  We only need to check instance
19196         fields. 
19197
19198         * expression.cs (As.DoResolve): Test for reference type.
19199
19200         * statement.cs (Using.ResolveExpression): Use
19201         ConvertImplicitRequired, not ConvertImplicit which reports an
19202         error on failture
19203         (Using.ResolveLocalVariableDecls): ditto.
19204
19205         * expression.cs (Binary.ResolveOperator): Report errors in a few
19206         places where we had to.
19207
19208         * typemanager.cs (IsUnmanagedtype): Finish implementation.
19209
19210 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
19211
19212         * expression.cs: Use StoreFromPtr instead of extracting the type
19213         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
19214
19215         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
19216         an enumeration value to a System.Enum, but System.Enum is not a
19217         value type, but an class type, so we need to box.
19218
19219         (Expression.ConvertExplicit): One codepath could return
19220         errors but not flag them.  Fix this.  Fixes #31853
19221
19222         * parameter.cs (Resolve): Do not allow void as a parameter type.
19223
19224 2002-10-06  Martin Baulig  <martin@gnome.org>
19225
19226         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
19227         if it's a class type and not a struct.  Fixes #31815.
19228
19229 2002-10-06  Martin Baulig  <martin@gnome.org>
19230
19231         * statement.cs: Reworked the flow analysis code a bit to make it
19232         usable for dead code elimination.
19233
19234 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19235
19236         * cs-parser.jay: allow empty source files. Fixes bug #31781.
19237
19238 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
19239
19240         * expression.cs (ComposedCast.DoResolveType): A quick workaround
19241         to fix the test 165, will investigate deeper.
19242
19243 2002-10-04  Martin Baulig  <martin@gnome.org>
19244
19245         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
19246         finally blocks actually work.
19247         (Try.Resolve): We don't need to create a sibling for `finally' if
19248         there is no finally block.
19249
19250 2002-10-04  Martin Baulig  <martin@gnome.org>
19251
19252         * class.cs (Constructor.Define): The default accessibility for a
19253         non-default constructor is private, not public.
19254
19255 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
19256
19257         * class.cs (Constructor): Make AllowedModifiers public, add
19258         EXTERN.
19259
19260         * cs-parser.jay: Perform the modifiers test here, as the
19261         constructor for the Constructor class usually receives a zero
19262         because of the way we create it (first we create, later we
19263         customize, and we were never checking the modifiers).
19264
19265         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
19266         is a version of LookupTypeReflection that includes the type-name
19267         cache.  This can be used as a fast path for functions that know
19268         the fully qualified name and are only calling into *.GetType() to
19269         obtain a composed type.
19270
19271         This is also used by TypeManager.LookupType during its type
19272         composition.
19273
19274         (LookupType): We now also track the real type name, as sometimes
19275         we can get a quey for the real type name from things like
19276         ComposedCast.  This fixes bug 31422.
19277
19278         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
19279         complete type fullname, it does not have to go through the type
19280         resolution system to obtain the composed version of the type (for
19281         obtaining arrays or pointers).
19282
19283         (Conditional.Emit): Use the EmitBoolExpression to
19284         generate nicer code, as requested by Paolo.
19285
19286         (ArrayCreation.CheckIndices): Use the patch from
19287         hwang_rob@yahoo.ca to validate the array initializers. 
19288
19289 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
19290
19291         * class.cs (ConstructorInitializer.Emit): simplify code by using
19292         Invocation.EmitCall, and at the same time, fix the bugs in calling
19293         parent constructors that took variable arguments. 
19294
19295         * ecore.cs (Expression.ConvertNumericExplicit,
19296         Expression.ImplicitNumericConversion): Remove the code that
19297         manually wrapped decimal (InternalTypeConstructor call is now gone
19298         as well).
19299
19300         * expression.cs (Cast.TryReduce): Also handle decimal types when
19301         trying to perform a constant fold on the type.
19302
19303         * typemanager.cs (IsUnmanagedtype): Partially implemented.
19304
19305         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
19306         that only turned off an error report, and did nothing else. 
19307
19308 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
19309
19310         * driver.cs: Handle and ignore /fullpaths
19311
19312 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
19313
19314         * expression.cs (Binary.ResolveOperator): Catch the case where
19315         DoNumericPromotions returns true, 
19316
19317         (Binary.DoNumericPromotions): Simplify the code, and the tests.
19318
19319 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
19320
19321         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
19322         report error 70.
19323
19324 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
19325
19326         * ecore.cs (ConvertNumericExplicit): It is not enough that the
19327         conversion exists, but it is also required that the conversion be
19328         performed.  This manifested in "(Type64Enum) 2".  
19329
19330         * class.cs (TypeManager.AddMethod): The fix is not to change
19331         AddEnum, because that one was using a fully qualified name (every
19332         DeclSpace derivative does), but to change the AddMethod routine
19333         that was using an un-namespaced name.  This now correctly reports
19334         the duplicated name.
19335
19336         Revert patch until I can properly fix it.  The issue
19337         is that we have a shared Type space across all namespaces
19338         currently, which is wrong.
19339
19340         Options include making the Namespace a DeclSpace, and merge
19341         current_namespace/current_container in the parser.
19342
19343 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
19344
19345         * cs-parser.jay: Improve error reporting when we get a different
19346         kind of expression in local_variable_type and
19347         local_variable_pointer_type. 
19348
19349         Propagate this to avoid missleading errors being reported.
19350
19351         * ecore.cs (ImplicitReferenceConversion): treat
19352         TypeManager.value_type as a target just like object_type.   As
19353         code like this:
19354
19355         ValueType v = 1;
19356
19357         Is valid, and needs to result in the int 1 being boxed before it
19358         is assigned to the value type v.
19359
19360         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
19361         to validate the enumeration name.
19362
19363         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
19364         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
19365         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
19366
19367         * ecore.cs (TryImplicitIntConversion): When doing an
19368         implicit-enumeration-conversion, check if the type is 64-bits and
19369         perform a conversion before passing to EnumConstant.
19370
19371 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
19372
19373         * decl.cs (Error_AmbiguousTypeReference); New routine used to
19374         report ambiguous type references.  Unlike the MS version, we
19375         report what the ambiguity is.   Innovation at work ;-)
19376
19377         (DeclSpace.FindType): Require a location argument to
19378         display when we display an ambiguous error.
19379
19380         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
19381
19382         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
19383
19384         * expression.cs (EmitDynamicInitializers): Apply patch from
19385         hwang_rob@yahoo.ca that fixes the order in which we emit our
19386         initializers. 
19387
19388 2002-09-21  Martin Baulig  <martin@gnome.org>
19389
19390         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
19391         delegate takes no arguments.
19392
19393 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
19394
19395         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
19396         from integers.
19397
19398         * expression.cs: Extract the underlying type.
19399
19400         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
19401
19402         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
19403
19404 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
19405
19406         * class.cs (TypeContainer.DefineType): We can not use the nice
19407         PackingSize with the size set to 1 DefineType method, because it
19408         will not allow us to define the interfaces that the struct
19409         implements.
19410
19411         This completes the fixing of bug 27287
19412
19413         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
19414         means also structs.  This fixes part of the problem. 
19415         (Expresion.ImplicitReferenceConversionExists): ditto.
19416
19417         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
19418         error if there were no errors reported during the type lookup
19419         process, to avoid duplicates or redundant errors.  Without this
19420         you would get an ambiguous errors plus a type not found.  We have
19421         beaten the user enough with the first error.  
19422
19423         (DeclSparce.FindType): Emit a warning if we have an ambiguous
19424         reference. 
19425
19426         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
19427         during the resolution process, stop the lookup, this avoids
19428         repeated error reports (same error twice).
19429
19430         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
19431
19432         * typemanager.cs (LookupType): Redo the type lookup code to match
19433         the needs of System.Reflection.  
19434
19435         The issue is that System.Reflection requires references to nested
19436         types to begin with a "+" sign instead of a dot.  So toplevel
19437         types look like: "NameSpace.TopLevelClass", and nested ones look
19438         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
19439         levels. 
19440
19441 2002-09-19  Martin Baulig  <martin@gnome.org>
19442
19443         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
19444         says that a method always returns or always throws an exception,
19445         don't report the CS0161.
19446
19447         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
19448         set `Returns = new_returns'.
19449
19450 2002-09-19  Martin Baulig  <martin@gnome.org>
19451
19452         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
19453         to an enum constant, check for a CS0176.
19454
19455 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
19456
19457         * class.cs (TypeContainer.CheckPairedOperators): Now we check
19458         for operators that must be in pairs and report errors.
19459
19460         * ecore.cs (SimpleName.DoResolveType): During the initial type
19461         resolution process, when we define types recursively, we must
19462         check first for types in our current scope before we perform
19463         lookups in the enclosing scopes.
19464
19465         * expression.cs (MakeByteBlob): Handle Decimal blobs.
19466
19467         (Invocation.VerifyArgumentsCompat): Call
19468         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
19469         I thought we were supposed to always call this, but there are a
19470         few places in the code where we dont do it.
19471
19472 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
19473
19474         * driver.cs: Add support in -linkres and -resource to specify the
19475         name of the identifier.
19476
19477 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
19478
19479         * ecore.cs (StandardConversionExists): Sync with the conversion
19480         code: allow anything-* to void* conversions.
19481
19482         (FindMostSpecificSource): Use an Expression argument
19483         instead of a Type, because we might be handed over a Literal which
19484         gets a few more implicit conversions that plain types do not.  So
19485         this information was being lost.
19486
19487         Also, we drop the temporary type-holder expression when not
19488         required.
19489
19490 2002-09-17  Martin Baulig  <martin@gnome.org>
19491
19492         * class.cs (PropertyBase.CheckBase): Don't check the base class if
19493         this is an explicit interface implementation.
19494
19495 2002-09-17  Martin Baulig  <martin@gnome.org>
19496
19497         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
19498         different `IndexerName' attributes.
19499
19500         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
19501         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
19502         virtual CommonResolve().
19503
19504 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
19505
19506         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
19507         and convert that to the UnderlyingType.
19508
19509         * statement.cs (Foreach.Resolve): Indexers are just like variables
19510         or PropertyAccesses.
19511
19512         * cs-tokenizer.cs (consume_string): Track line numbers and columns
19513         inside quoted strings, we were not doing this before.
19514
19515 2002-09-16  Martin Baulig  <martin@gnome.org>
19516
19517         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
19518         resolve it.  This is needed for the definite assignment check of the
19519         instance expression, fixes bug #29846.
19520         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
19521
19522 2002-09-16  Nick Drochak  <ndrochak@gol.com>
19523
19524         * parameter.cs: Fix compile error.  Cannot reference static member
19525         from an instance object.  Is this an mcs bug?
19526
19527 2002-09-14  Martin Baulig  <martin@gnome.org>
19528
19529         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
19530         multiple times.  Fixes bug #30295, added test-166.cs.
19531
19532 2002-09-14  Martin Baulig  <martin@gnome.org>
19533
19534         * statement.cs (Block.Emit): Don't emit unreachable code.
19535         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
19536         `break' statements.
19537         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
19538
19539 2002-09-14  Martin Baulig  <martin@gnome.org>
19540
19541         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
19542         is set.
19543
19544 2002-09-14  Martin Baulig  <martin@gnome.org>
19545
19546         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
19547         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
19548         be false on the ms runtime.
19549
19550 2002-09-13  Martin Baulig  <martin@gnome.org>
19551
19552         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
19553         the CS0038 error message.
19554
19555 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
19556
19557         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
19558         constant inside, return it.
19559
19560 2002-09-12  Martin Baulig  <martin@gnome.org>
19561
19562         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
19563         implicit conversion can be done between enum types.
19564
19565         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
19566         check whether an implicit conversion to the current enum's UnderlyingType
19567         exists and report an error if not.
19568
19569         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
19570         without debugging support.
19571
19572         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
19573         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
19574
19575 2002-09-12  Martin Baulig  <martin@gnome.org>
19576
19577         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
19578
19579         * ecore.cs (IMemberExpr.DeclaringType): New property.
19580         (SimpleName.SimpleNameResolve): Check whether we're accessing a
19581         nonstatic member of an outer type (CS0038).
19582
19583 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
19584
19585         * driver.cs: Activate the using-error detector at warning level
19586         4 (at least for MS-compatible APIs).
19587
19588         * namespace.cs (VerifyUsing): Small buglett fix.
19589
19590         * pending.cs (PendingImplementation): pass the container pointer. 
19591
19592         * interface.cs (GetMethods): Allow for recursive definition.  Long
19593         term, I would like to move every type to support recursive
19594         definitions, not the current ordering mechanism that we have right
19595         now.
19596
19597         The situation is this: Attributes are handled before interfaces,
19598         so we can apply attributes to interfaces.  But some attributes
19599         implement interfaces, we will now handle the simple cases
19600         (recursive definitions will just get an error).  
19601
19602         * parameter.cs: Only invalidate types at the end if we fail to
19603         lookup all types.  
19604
19605 2002-09-09  Martin Baulig  <martin@gnome.org>
19606
19607         * ecore.cs (PropertyExpr.Emit): Also check for
19608         TypeManager.system_int_array_get_length so this'll also work when
19609         compiling corlib.  Fixes #30003.
19610
19611 2002-09-09  Martin Baulig  <martin@gnome.org>
19612
19613         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
19614         and throw an exception if we can't get the type's size.  Fixed #30040,
19615         added test-165.cs.
19616
19617 2002-09-09  Martin Baulig  <martin@gnome.org>
19618
19619         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
19620
19621         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
19622         context.  Fixes bug #30027.
19623
19624         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
19625         virtual functions.  Fixes bug #30043, added test-164.cs.
19626
19627 2002-09-08  Ravi Pratap  <ravi@ximian.com>
19628
19629         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
19630
19631 2002-09-08  Nick Drochak  <ndrochak@gol.com>
19632
19633         * driver.cs: Use an object to get the windows codepage since it's not a
19634         static property.
19635
19636 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
19637
19638         * statement.cs (For.Emit): for infinite loops (test == null)
19639         return whether there is a break inside, not always "true".
19640
19641         * namespace.cs (UsingEntry): New struct to hold the name of the
19642         using definition, the location where it is defined, and whether it
19643         has been used in a successful type lookup.
19644
19645         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
19646         strings.
19647
19648         * decl.cs: ditto.
19649
19650 2002-09-06  Ravi Pratap  <ravi@ximian.com>
19651
19652         * attribute.cs : Fix incorrect code which relied on catching
19653         a NullReferenceException to detect a null being passed in
19654         where an object was expected.
19655
19656 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
19657
19658         * statement.cs (Try): flag the catch variable as assigned
19659
19660         * expression.cs (Cast): Simplified by using ResolveType instead of
19661         manually resolving.
19662
19663         * statement.cs (Catch): Fix bug by using ResolveType.
19664
19665 2002-09-06  Ravi Pratap  <ravi@ximian.com>
19666
19667         * expression.cs (BetterConversion): Special case for when we have
19668         a NullLiteral as the argument and we have to choose between string
19669         and object types - we choose string the way csc does.
19670
19671         * attribute.cs (Attribute.Resolve): Catch the
19672         NullReferenceException and report error #182 since the Mono
19673         runtime no more has the bug and having this exception raised means
19674         we tried to select a constructor which takes an object and is
19675         passed a null.
19676
19677 2002-09-05  Ravi Pratap  <ravi@ximian.com>
19678
19679         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
19680         message (1502, 1503) when we can't locate a method after overload
19681         resolution. This is much more informative and closes the bug
19682         Miguel reported.
19683
19684         * interface.cs (PopulateMethod): Return if there are no argument
19685         types. Fixes a NullReferenceException bug.
19686
19687         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
19688         expressions too. Previously we were checking only in one place for
19689         positional arguments leaving out named arguments.
19690
19691         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
19692         type to the enum type is not allowed. Remove code corresponding to
19693         that.
19694
19695         (ConvertNumericExplicit): Allow explicit conversions from
19696         the underlying type to enum type. This precisely follows the spec
19697         and closes a bug filed by Gonzalo.
19698
19699 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19700
19701         * compiler.csproj:
19702         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
19703
19704 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
19705
19706         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
19707         it was important that we stored the right value after the
19708         reduction in `converted'.
19709
19710 2002-09-04  Martin Baulig  <martin@gnome.org>
19711
19712         * location.cs (Location.SymbolDocument): Use full pathnames for the
19713         source files.
19714
19715 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
19716
19717         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
19718         of the expression resolve mechanism, because that will catch the
19719         SimpleName error failures.
19720
19721         (Conditional): If we can not resolve the
19722         expression, return, do not crash.
19723
19724 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19725
19726         * cs-tokenizer.cs:
19727         (location): display token name instead of its number.
19728
19729 2002-08-28  Martin Baulig  <martin@gnome.org>
19730
19731         * expression.cs (Binary.ResolveOperator): Don't silently return
19732         but return an error if an operator cannot be applied between two
19733         enum types.
19734
19735 2002-08-28  Martin Baulig  <martin@gnome.org>
19736
19737         * class.cs (Constructor.Define): Set the permission attributes
19738         correctly instead of making all constructors public.
19739
19740 2002-08-28  Martin Baulig  <martin@gnome.org>
19741
19742         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
19743         for private members before reporting a CS0103; if we find anything,
19744         it's a CS0122.
19745
19746 2002-08-28  Martin Baulig  <martin@gnome.org>
19747
19748         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
19749         to check whether `closure_start_type == closure_invocation_type',
19750         we also need to check whether `m.DeclaringType == closure_invocation_type'
19751         before bypassing the permission checks.  We might be accessing
19752         protected/private members from the base class.
19753         (TypeManager.RealMemberLookup): Only set private_ok if private
19754         members were requested via BindingFlags.NonPublic.
19755
19756         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
19757
19758         * expression.cs (MemberAccess.ResolveMemberAccess): Set
19759         MethodGroupExpr.IsExplicitImpl if appropriate.
19760         (Invocation.DoResolve): Don't report the CS0120 for explicit
19761         interface implementations.
19762
19763 2002-08-27  Martin Baulig  <martin@gnome.org>
19764
19765         * expression.cs (Invocation.DoResolve): If this is a static
19766         method and we don't have an InstanceExpression, we must report
19767         a CS0120.
19768
19769 2002-08-25  Martin Baulig  <martin@gnome.org>
19770
19771         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
19772         `==' between a valuetype and an object.
19773
19774 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
19775
19776         * ecore.cs (TypeExpr): Provide a ToString method.
19777
19778 2002-08-24  Martin Baulig  <martin@gnome.org>
19779
19780         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
19781         now called proggie.dbg and it's a binary file.
19782
19783 2002-08-23  Martin Baulig  <martin@gnome.org>
19784
19785         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
19786
19787 2002-08-23  Martin Baulig  <martin@gnome.org>
19788
19789         * struct.cs (MyStructInfo.ctor): Make this work with empty
19790         structs; it's not allowed to use foreach() on null.
19791
19792 2002-08-23  Martin Baulig  <martin@gnome.org>
19793
19794         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
19795         writer the full pathname of the generated assembly.
19796
19797 2002-08-23  Martin Baulig  <martin@gnome.org>
19798
19799         * statements.cs (FlowBranching.UsageVector.MergeChildren):
19800         A `finally' block never returns or breaks; improved handling of
19801         unreachable code.
19802
19803 2002-08-23  Martin Baulig  <martin@gnome.org>
19804
19805         * statement.cs (Throw.Resolve): Allow `throw null'.
19806
19807 2002-08-23  Martin Baulig  <martin@gnome.org>
19808
19809         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
19810         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
19811         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
19812         MemberLookup would return a wrong event if this is an explicit
19813         interface implementation and the class has an event with the same
19814         name.
19815
19816 2002-08-23  Martin Baulig  <martin@gnome.org>
19817
19818         * statement.cs (Block.AddChildVariableNames): New public method.
19819         (Block.AddChildVariableName): Likewise.
19820         (Block.IsVariableNameUsedInChildBlock): Likewise.
19821         (Block.AddVariable): Check whether a variable name has already
19822         been used in a child block.
19823
19824         * cs-parser.jay (declare_local_variables): Mark all variable names
19825         from the current block as being used in a child block in the
19826         implicit block.
19827
19828 2002-08-23  Martin Baulig  <martin@gnome.org>
19829
19830         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
19831         find the symbol writer.
19832
19833         * driver.cs: csc also allows the arguments to /define being
19834         separated by commas, not only by semicolons.
19835
19836 2002-08-23  Martin Baulig  <martin@gnome.org>
19837
19838         * interface.cs (Interface.GetMembers): Added static check for events.
19839
19840 2002-08-15  Martin Baulig  <martin@gnome.org>
19841
19842         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
19843         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
19844
19845         * ecore.cs (Expression.MemberLookup): Added documentation and explained
19846         why the MethodData.EmitDestructor() change was necessary.
19847
19848 2002-08-20  Martin Baulig  <martin@gnome.org>
19849
19850         * class.cs (TypeContainer.FindMembers): Added static check for events.
19851
19852         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
19853
19854         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
19855         use Type.GetEvents(), not Type.FindMembers().
19856
19857 2002-08-20  Martin Baulig  <martin@gnome.org>
19858
19859         * decl.cs (MemberCache): Added a special method cache which will
19860         be used for method-only searched.  This ensures that a method
19861         search will return a MethodInfo with the correct ReflectedType for
19862         inherited methods.      
19863
19864 2002-08-20  Martin Baulig  <martin@gnome.org>
19865
19866         * decl.cs (DeclSpace.FindMembers): Made this public.
19867
19868 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19869
19870         * delegate.cs: fixed build on windows.
19871         [FIXME:  Filed as bug #29150: MCS must report these errors.]
19872
19873 2002-08-19  Ravi Pratap  <ravi@ximian.com>
19874
19875         * ecore.cs (StandardConversionExists): Return a false
19876         if we are trying to convert the void type to anything else
19877         since that is not allowed.
19878
19879         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
19880         we flag error 70 in the event an event is trying to be accessed
19881         directly from outside the declaring type.
19882
19883 2002-08-20  Martin Baulig  <martin@gnome.org>
19884
19885         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
19886         MemberCache from typemanager.cs to decl.cs.
19887
19888 2002-08-19  Martin Baulig  <martin@gnome.org>
19889
19890         * class.cs (TypeContainer): Implement IMemberContainer.
19891         (TypeContainer.DefineMembers): Create the MemberCache.
19892         (TypeContainer.FindMembers): Do better BindingFlags checking; only
19893         return public members if BindingFlags.Public was given, check
19894         whether members are static.
19895
19896 2002-08-16  Martin Baulig  <martin@gnome.org>
19897
19898         * decl.cs (DeclSpace.Define): Splitted this in Define and
19899         DefineMembers.  DefineMembers is called first and initializes the
19900         MemberCache.
19901
19902         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
19903         DefineMembers() on all our DeclSpaces.
19904
19905         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
19906         but call DefineMembers() on all nested interfaces.  We call their
19907         Define() in our new Define() function.
19908
19909         * interface.cs (Interface): Implement IMemberContainer.
19910         (Interface.Define): Moved all code except the attribute stuf to
19911         DefineMembers().
19912         (Interface.DefineMembers): Initialize the member cache.
19913
19914         * typemanager.cs (IMemberFinder): Removed this interface, we don't
19915         need this anymore since we can use MemberCache.FindMembers directly.
19916
19917 2002-08-19  Martin Baulig  <martin@gnome.org>
19918
19919         * typemanager.cs (MemberCache): When creating the cache for an
19920         interface type, add all inherited members.
19921         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
19922         to `out bool used_cache' and documented it.
19923         (TypeManager.MemberLookup): If we already used the cache in the first
19924         iteration, we don't need to do the interfaces check.
19925
19926 2002-08-19  Martin Baulig  <martin@gnome.org>
19927
19928         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
19929         here from IMemberFinder and don't implement this interface anymore.
19930         (DeclSpace.MemberCache): Moved here from IMemberFinder.
19931
19932         * typemanager.cs (IMemberFinder): This interface is now only used by
19933         classes which actually support the member cache.
19934         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
19935         since we only put DeclSpaces into this Hashtable.
19936         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
19937         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
19938
19939 2002-08-16  Martin Baulig  <martin@gnome.org>
19940
19941         * typemanager.cs (ICachingMemberFinder): Removed.
19942         (IMemberFinder.MemberCache): New property.
19943         (TypeManager.FindMembers): Merged this with RealFindMembers().
19944         This function will never be called from TypeManager.MemberLookup()
19945         so we can't use the cache here, just the IMemberFinder.
19946         (TypeManager.MemberLookup_FindMembers): Check whether the
19947         IMemberFinder has a MemberCache and call the cache's FindMembers
19948         function.
19949         (MemberCache): Rewrote larger parts of this yet another time and
19950         cleaned it up a bit.
19951
19952 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
19953
19954         * driver.cs (LoadArgs): Support quoting.
19955
19956         (Usage): Show the CSC-like command line arguments.
19957
19958         Improved a few error messages.
19959
19960 2002-08-15  Martin Baulig  <martin@gnome.org>
19961
19962         * typemanager.cs (IMemberContainer.Type): New property.
19963         (IMemberContainer.IsInterface): New property.
19964
19965         The following changes are conditional to BROKEN_RUNTIME, which is
19966         defined at the top of the file.
19967
19968         * typemanager.cs (MemberCache.MemberCache): Don't add the base
19969         class'es members, but add all members from TypeHandle.ObjectType
19970         if we're an interface.
19971         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
19972         is the current type.
19973         (MemberCache.CacheEntry.Container): Removed this field.
19974         (TypeHandle.GetMembers): Include inherited members.
19975
19976 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19977
19978         * typemanager.cs: fixed compilation and added a comment on a field that
19979         is never used.
19980
19981 2002-08-15  Martin Baulig  <martin@gnome.org>
19982
19983         * class.cs (ConstructorInitializer.Resolve): In the
19984         Expression.MemberLookup call, use the queried_type as
19985         invocation_type.
19986
19987         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
19988         declared' attribute, it's always true.
19989         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
19990         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
19991         temporary wrapper for FindMembers which tells MemberLookup whether
19992         members from the base classes are included in the return value.
19993         This will go away soon.
19994         (TypeManager.MemberLookup): Use this temporary hack here; once the
19995         new MemberCache is completed, we don't need to do the DeclaredOnly
19996         looping here anymore since the MemberCache will take care of this.
19997         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
19998         (MemberCache): When creating the MemberCache for a class, get
19999         members from the current class and all its base classes.
20000         (MemberCache.CacheEntry.Container): New field.  This is a
20001         temporary hack until the Mono runtime is fixed to distinguish
20002         between ReflectedType and DeclaringType.  It allows us to use MCS
20003         with both the MS runtime and the unfixed Mono runtime without
20004         problems and without accecting performance.
20005         (MemberCache.SearchMembers): The DeclaredOnly looping from
20006         TypeManager.MemberLookup is now done here.      
20007
20008 2002-08-14  Martin Baulig  <martin@gnome.org>
20009
20010         * statement.cs (MyStructInfo.MyStructInfo): Don't call
20011         Type.GetFields on dynamic types but get the fields from the
20012         corresponding TypeContainer.
20013         (MyStructInfo.GetStructInfo): Added check for enum types.
20014
20015         * typemanager.cs (MemberList.IsSynchronized): Implemented.
20016         (MemberList.SyncRoot): Implemented.
20017         (TypeManager.FilterWithClosure): No need to check permissions if
20018         closure_start_type == closure_invocation_type, don't crash if
20019         closure_invocation_type is null.
20020
20021 2002-08-13  Martin Baulig  <martin@gnome.org>
20022
20023         Rewrote TypeContainer.FindMembers to use a member cache.  This
20024         gives us a speed increase of about 35% for the self-hosting MCS
20025         build and of about 15-20% for the class libs (both on GNU/Linux).
20026
20027         * report.cs (Timer): New class to get enhanced profiling.  This
20028         whole class is "TIMER" conditional since it remarkably slows down
20029         compilation speed.
20030
20031         * class.cs (MemberList): New class.  This is an IList wrapper
20032         which we're now using instead of passing MemberInfo[]'s around to
20033         avoid copying this array unnecessarily.
20034         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
20035         (ICachingMemberFinder, IMemberContainer): New interface.
20036         (TypeManager.FilterWithClosure): If `criteria' is null, the name
20037         has already been checked, otherwise use it for the name comparision.
20038         (TypeManager.FindMembers): Renamed to RealMemberFinder and
20039         provided wrapper which tries to use ICachingMemberFinder.FindMembers
20040         if possible.  Returns a MemberList, not a MemberInfo [].
20041         (TypeHandle): New class, implements IMemberContainer.  We create
20042         one instance of this class per type, it contains a MemberCache
20043         which is used to do the member lookups.
20044         (MemberCache): New class.  Each instance of this class contains
20045         all members of a type and a name-based hash table.
20046         (MemberCache.FindMembers): This is our new member lookup
20047         function.  First, it looks up all members of the requested name in
20048         the hash table.  Then, it walks this list and sorts out all
20049         applicable members and returns them.
20050
20051 2002-08-13  Martin Baulig  <martin@gnome.org>
20052
20053         In addition to a nice code cleanup, this gives us a performance
20054         increase of about 1.4% on GNU/Linux - not much, but it's already
20055         half a second for the self-hosting MCS compilation.
20056
20057         * typemanager.cs (IMemberFinder): New interface.  It is used by
20058         TypeManager.FindMembers to call FindMembers on a TypeContainer,
20059         Enum, Delegate or Interface.
20060         (TypeManager.finder_to_member_finder): New PtrHashtable.
20061         (TypeManager.finder_to_container): Removed.
20062         (TypeManager.finder_to_delegate): Removed.
20063         (TypeManager.finder_to_interface): Removed.
20064         (TypeManager.finder_to_enum): Removed.
20065
20066         * interface.cs (Interface): Implement IMemberFinder.
20067
20068         * delegate.cs (Delegate): Implement IMemberFinder.
20069
20070         * enum.cs (Enum): Implement IMemberFinder.
20071
20072         * class.cs (TypeContainer): Implement IMemberFinder.
20073
20074 2002-08-12  Martin Baulig  <martin@gnome.org>
20075
20076         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
20077
20078 2002-08-12  Martin Baulig  <martin@gnome.org>
20079
20080         * ecore.cs (ITypeExpression): New interface for expressions which
20081         resolve to a type.
20082         (TypeExpression): Renamed to TypeLookupExpression.
20083         (Expression.DoResolve): If we're doing a types-only lookup, the
20084         expression must implement the ITypeExpression interface and we
20085         call DoResolveType() on it.
20086         (SimpleName): Implement the new ITypeExpression interface.
20087         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
20088         hack, the situation that we're only looking up types can't happen
20089         anymore when this method is called.  Moved the type lookup code to
20090         DoResolveType() and call it.
20091         (SimpleName.DoResolveType): This ITypeExpression interface method
20092         is now doing the types-only lookup.
20093         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
20094         (ResolveFlags): Added MaskExprClass.
20095
20096         * expression.cs (MemberAccess): Implement the ITypeExpression
20097         interface.
20098         (MemberAccess.DoResolve): Added support for a types-only lookup
20099         when we're called via ITypeExpression.DoResolveType().
20100         (ComposedCast): Implement the ITypeExpression interface.
20101
20102         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
20103         Expression.Resolve() with ResolveFlags.Type instead.
20104
20105 2002-08-12  Martin Baulig  <martin@gnome.org>
20106
20107         * interface.cs (Interface.Define): Apply attributes.
20108
20109         * attribute.cs (Attribute.ApplyAttributes): Added support for
20110         interface attributes.
20111
20112 2002-08-11  Martin Baulig  <martin@gnome.org>
20113
20114         * statement.cs (Block.Emit): Only check the "this" variable if we
20115         do not always throw an exception.
20116
20117         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
20118         whether the property has a set accessor.
20119
20120 2002-08-11  Martin Baulig  <martin@gnome.org>
20121
20122         Added control flow analysis support for structs.
20123
20124         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
20125         with control flow analysis turned off.
20126         (IVariable): New interface.
20127         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
20128         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
20129         (FieldExpr.DoResolve): Resolve the instance expression with flow
20130         analysis turned off and do the definite assignment check after the
20131         resolving when we know what the expression will resolve to.
20132
20133         * expression.cs (LocalVariableReference, ParameterReference):
20134         Implement the new IVariable interface, only call the flow analysis
20135         code if ec.DoFlowAnalysis is true.
20136         (This): Added constructor which takes a Block argument.  Implement
20137         the new IVariable interface.
20138         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
20139         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
20140         This does the definite assignment checks for struct members.
20141
20142         * class.cs (Constructor.Emit): If this is a non-static `struct'
20143         constructor which doesn't have any initializer, call
20144         Block.AddThisVariable() to tell the flow analysis code that all
20145         struct elements must be initialized before control returns from
20146         the constructor.
20147
20148         * statement.cs (MyStructInfo): New public class.
20149         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
20150         argument to this indexer.  If non-zero, check an individual struct
20151         member, not the whole struct.
20152         (FlowBranching.CheckOutParameters): Check struct members.
20153         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
20154         overloaded versions of these methods which take an additional
20155         `int field_idx' argument to check struct members.
20156         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
20157         overloaded versions of these methods which take an additional
20158         `string field_name' argument to check struct member.s
20159         (VariableInfo): Implement the IVariable interface.
20160         (VariableInfo.StructInfo): New public property.  Returns the
20161         MyStructInfo instance of the variable if it's a struct or null.
20162         (Block.AddThisVariable): New public method.  This is called from
20163         Constructor.Emit() for non-static `struct' constructor which do
20164         not have any initializer.  It creates a special variable for the
20165         "this" instance variable which will be checked by the flow
20166         analysis code to ensure that all of the struct's fields are
20167         initialized before control returns from the constructor.
20168         (UsageVector): Added support for struct members.  If a
20169         variable/parameter is a struct with N members, we reserve a slot
20170         in the usage vector for each member.  A struct is considered fully
20171         initialized if either the struct itself (slot 0) or all its
20172         members are initialized.
20173
20174 2002-08-08  Martin Baulig  <martin@gnome.org>
20175
20176         * driver.cs (Driver.MainDriver): Only report an error CS5001
20177         if there were no compilation errors.
20178
20179         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
20180         `UnsafeContext' property to determine whether the parent is in
20181         unsafe context rather than checking the parent's ModFlags:
20182         classes nested in an unsafe class are unsafe as well.
20183
20184 2002-08-08  Martin Baulig  <martin@gnome.org>
20185
20186         * statement.cs (UsageVector.MergeChildren): Distinguish between
20187         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
20188         we return.  Added test17() and test18() to test-154.cs.
20189
20190 2002-08-08  Martin Baulig  <martin@gnome.org>
20191
20192         * typemanager.cs (TypeManager.FilterWithClosure): If we have
20193         Family access, make sure the invoking type isn't a subclass of the
20194         queried type (that'd be a CS1540).
20195
20196         * ecore.cs (Expression.MemberLookup): Added overloaded version of
20197         this method which takes an additional `Type invocation_type'.
20198
20199         * expression.cs (BaseAccess.DoResolve): Use the base type as
20200         invocation and query type.
20201         (MemberAccess.DoResolve): If the lookup failed and we're about to
20202         report a CS0122, try a lookup with the ec.ContainerType - if this
20203         succeeds, we must report a CS1540.
20204
20205 2002-08-08  Martin Baulig  <martin@gnome.org>
20206
20207         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
20208         (MethodGroupExpr): Implement the IMemberExpr interface.
20209
20210         * expression (MemberAccess.ResolveMemberAccess): No need to have
20211         any special code for MethodGroupExprs anymore, they're now
20212         IMemberExprs.   
20213
20214 2002-08-08  Martin Baulig  <martin@gnome.org>
20215
20216         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
20217         Family, FamANDAssem and FamORAssem permissions.
20218         (TypeManager.IsSubclassOrNestedChildOf): New public method.
20219
20220 2002-08-08  Martin Baulig  <martin@gnome.org>
20221
20222         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
20223         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
20224         or loop block.
20225
20226 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
20227
20228         * driver.cs: implemented /resource option to embed managed resources.
20229
20230 2002-08-07  Martin Baulig  <martin@gnome.org>
20231
20232         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
20233         (FieldBase.HasFieldInitializer): New public property.
20234         (FieldBase.GetInitializerExpression): New public method.  Resolves and
20235         returns the field initializer and makes sure it is only resolved once.
20236         (TypeContainer.EmitFieldInitializers): Call
20237         FieldBase.GetInitializerExpression to get the initializer, this ensures
20238         that it isn't resolved multiple times.
20239
20240         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
20241         the resolving process (SimpleName/MemberLookup) that we're currently
20242         emitting a field initializer (which must not access any instance members,
20243         this is an error CS0236).
20244
20245         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
20246         argument, if the `IsFieldInitializer' flag is set, we must report and
20247         error CS0236 and not an error CS0120.   
20248
20249 2002-08-07  Martin Baulig  <martin@gnome.org>
20250
20251         * ecore.cs (IMemberExpr): New public interface.
20252         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
20253         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
20254         if the expression is an IMemberExpr.
20255
20256         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
20257         to be null, implicitly default to `this' if we're non-static in
20258         this case.  Simplified the code a lot by using the new IMemberExpr
20259         interface.  Also fixed bug #28176 here.
20260
20261 2002-08-06  Martin Baulig  <martin@gnome.org>
20262
20263         * cs-parser.jay (SimpleLookup): Removed.  We need to create
20264         ParameterReferences during semantic analysis so that we can do a
20265         type-only search when resolving Cast, TypeOf and SizeOf.
20266         (block): Pass the `current_local_parameters' to the Block's
20267         constructor.
20268
20269         * class.cs (ConstructorInitializer): Added `Parameters parameters'
20270         argument to the constructor.
20271         (ConstructorInitializer.Resolve): Create a temporary implicit
20272         block with the parameters.
20273
20274         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
20275         references here if we aren't doing a type-only search.
20276
20277         * statement.cs (Block): Added constructor which takes a
20278         `Parameters parameters' argument.
20279         (Block.Parameters): New public property.
20280
20281         * support.cs (InternalParameters.Parameters): Renamed `parameters'
20282         to `Parameters' and made it public readonly.
20283
20284 2002-08-06  Martin Baulig  <martin@gnome.org>
20285
20286         * ecore.cs (Expression.Warning): Made this public as well.
20287
20288         * report.cs (Report.Debug): Print the contents of collections.
20289
20290 2002-08-06  Martin Baulig  <martin@gnome.org>
20291
20292         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
20293         used to tell Resolve() which kinds of expressions it may return.
20294         (Expression.Resolve): Added overloaded version of this method which
20295         takes a `ResolveFlags flags' argument.  This can be used to tell
20296         Resolve() which kinds of expressions it may return.  Reports a
20297         CS0118 on error.
20298         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
20299         ResolveFlags.SimpleName.
20300         (Expression.Error118): Added overloaded version of this method which
20301         takes a `ResolveFlags flags' argument.  It uses the flags to determine
20302         which kinds of expressions are allowed.
20303
20304         * expression.cs (Argument.ResolveMethodGroup): New public method.
20305         Resolves an argument, but allows a MethodGroup to be returned.
20306         This is used when invoking a delegate.
20307
20308         * TODO: Updated a bit.
20309
20310 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20311
20312         Fixed compilation with csc.
20313
20314         * ecore.cs: Expression.Error made public. Is this correct? Should
20315         Warning be made public too?
20316
20317         * expression.cs: use ea.Location instead of ea.loc.
20318         [FIXME:  Filed as bug #28607: MCS must report these errors.]
20319
20320 2002-08-06  Martin Baulig  <martin@gnome.org>
20321
20322         * ecore.cs (Expression.loc): Moved the location here instead of
20323         duplicating it in all derived classes.
20324         (Expression.Location): New public property.
20325         (Expression.Error, Expression.Warning): Made them non-static and
20326         removed the location argument.
20327         (Expression.Warning): Added overloaded version which takes an
20328         `int level' argument.
20329         (Expression.Error118): Make this non-static and removed the
20330         expression and location arguments.
20331         (TypeExpr): Added location argument to the constructor.
20332
20333         * expression.cs (StaticCallExpr): Added location argument to
20334         the constructor.
20335         (Indirection, PointerArithmetic): Likewise.
20336         (CheckedExpr, UnCheckedExpr): Likewise.
20337         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
20338         (StringPtr): Likewise.
20339
20340
20341 2002-08-05  Martin Baulig  <martin@gnome.org>
20342
20343         * expression.cs (BaseAccess.DoResolve): Actually report errors.
20344
20345         * assign.cs (Assign.DoResolve): Check whether the source
20346         expression is a value or variable.
20347
20348         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
20349         while resolving the corresponding blocks.
20350
20351         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
20352         an error, don't silently return null.
20353
20354         * statement.cs (Block.AddVariable): Do the error reporting here
20355         and distinguish between CS0128 and CS0136.
20356         (Block.DoResolve): Report all unused labels (warning CS0164).
20357         (LabeledStatement): Pass the location to the constructor.
20358         (LabeledStatement.HasBeenReferenced): New property.
20359         (LabeledStatement.Resolve): Set it to true here.
20360
20361         * statement.cs (Return.Emit): Return success even after reporting
20362         a type mismatch error (CS0126 or CS0127), this is what csc does and
20363         it avoids confusing the users with any consecutive errors.
20364
20365 2002-08-05  Martin Baulig  <martin@gnome.org>
20366
20367         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
20368
20369         * const.cs (Const.LookupConstantValue): Catch circular definitions.
20370
20371         * expression.cs (MemberAccess.DoResolve): Silently return if an
20372         error has already been reported.
20373
20374         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
20375         error has already been reported.
20376
20377 2002-08-05  Martin Baulig  <martin@gnome.org>
20378
20379         * statement.cs (UsageVector): Only initialize the `parameters'
20380         vector if we actually have any "out" parameters.
20381
20382 2002-08-05  Martin Baulig  <martin@gnome.org>
20383
20384         * expression.cs (Binary.ResolveOperator): When combining delegates,
20385         they must have the same type.
20386
20387 2002-08-05  Martin Baulig  <martin@gnome.org>
20388
20389         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
20390         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
20391         work with the ms runtime and we also don't need it: if we're a
20392         PropertyBuilder and not in the `indexer_arguments' hash, then we
20393         are a property and not an indexer.
20394
20395         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
20396         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
20397         since the latter one doesn't work with the ms runtime.
20398
20399 2002-08-03  Martin Baulig  <martin@gnome.org>
20400
20401         Fixed bugs #27998 and #22735.
20402
20403         * class.cs (Method.IsOperator): New public field.
20404         (Method.CheckBase): Report CS0111 if there's already a method
20405         with the same parameters in the current class.  Report CS0508 when
20406         attempting to change the return type of an inherited method.
20407         (MethodData.Emit): Report CS0179 if a method doesn't have a body
20408         and it's not marked abstract or extern.
20409         (PropertyBase): New abstract base class for Property and Indexer.
20410         (PropertyBase.CheckBase): Moved here from Property and made it work
20411         for indexers.
20412         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
20413         the same so we can reuse it there.
20414         (Property, Indexer): Derive from PropertyBase.
20415         (MethodSignature.inheritable_property_signature_filter): New delegate
20416         to find properties and indexers.
20417
20418         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
20419         argument and improved error reporting.
20420
20421         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
20422         EmptyReadOnlyParameters and made it a property.
20423
20424         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
20425         version of this method which takes a `PropertyInfo indexer'.
20426         (TypeManager.RegisterIndexer): New method.
20427
20428         * class.cs: Added myself as author of this file :-)
20429
20430 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20431
20432         * class.cs: fixed compilation on windoze.
20433
20434 2002-08-03  Martin Baulig  <martin@gnome.org>
20435
20436         * interface.cs (Interface.GetInterfaceBases): Check whether all
20437         base interfaces are at least as accessible than the current one.
20438
20439         * class.cs (TypeContainer.GetClassBases): Check whether base types
20440         are at least as accessible than the current type.
20441         (TypeContainer.AsAccessible): Implemented and made non-static.
20442         (MemberBase.CheckParameters): Report errors if the accessibility
20443         checks fail.
20444
20445         * delegate.cs (Delegate.Delegate): The default visibility is
20446         internal for top-level types and private for nested types.
20447         (Delegate.Define): Report errors if the accessibility checks fail.
20448
20449         * enum.cs (Enum.Enum): The default visibility is internal for
20450         top-level types and private for nested types.
20451         (Enum.DefineType): Compute the correct visibility.
20452
20453         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
20454         function which takes a `bool is_toplevel' instead of a TypeContainer.
20455
20456         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
20457         builtin type.
20458
20459 2002-08-02  Martin Baulig  <martin@gnome.org>
20460
20461         * expression.cs (LocalVariableReferenc): Added constructor which
20462         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
20463         (LocalVariableReference.IsReadOnly): New property.
20464         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
20465         variable is readonly, use our own readonly flag to do this; you can
20466         use the new constructor to get a writable reference to a read-only
20467         variable.
20468
20469         * cs-parser.jay (foreach_statement, using_statement): Get a writable
20470         reference to the local variable.
20471
20472 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
20473
20474         * rootcontext.cs (ResolveCore): Also include System.Exception
20475
20476         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
20477         we reach an EmptyStatement.
20478
20479         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
20480         is also fine.
20481
20482         * expression.cs (Binary.ResolveOperator): Check error result in
20483         two places.
20484
20485         use brtrue/brfalse directly and avoid compares to null.
20486
20487 2002-08-02  Martin Baulig  <martin@gnome.org>
20488
20489         * class.cs (TypeContainer.Define): Define all nested interfaces here.
20490         Fixes bug #28407, added test-155.cs.
20491
20492 2002-08-01  Martin Baulig  <martin@gnome.org>
20493
20494         * class.cs (Event.EmitDefaultMethod): Make this work with static
20495         events.  Fixes #28311, added verify-3.cs.
20496
20497 2002-08-01  Martin Baulig  <martin@gnome.org>
20498
20499         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
20500         `is_disposable' fields.
20501         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
20502         `hm.is_disposable' if we're using the collection pattern.
20503         (Foreach.EmitCollectionForeach): Use the correct type for the
20504         enumerator's local variable, only emit the try/finally block if
20505         necessary (fixes #27713).
20506
20507 2002-08-01  Martin Baulig  <martin@gnome.org>
20508
20509         * ecore.cs (Expression.report118): Renamed to Error118 and made
20510         it public static.
20511
20512         * statement.cs (Throw.Resolve): Check whether the expression is of
20513         the correct type (CS0118) and whether the type derives from
20514         System.Exception (CS0155).
20515         (Catch.Resolve): New method.  Do the type lookup here and check
20516         whether it derives from System.Exception (CS0155).
20517         (Catch.CatchType, Catch.IsGeneral): New public properties.
20518
20519         * typemanager.cs (TypeManager.exception_type): Added.
20520
20521 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
20522
20523         * driver.cs: Updated About function.
20524
20525 2002-07-31  Martin Baulig  <martin@gnome.org>
20526
20527         Implemented Control Flow Analysis.
20528
20529         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
20530         (EmitContext.CurrentBranching): Added.
20531         (EmitContext.StartFlowBranching): Added.
20532         (EmitContext.EndFlowBranching): Added.
20533         (EmitContext.KillFlowBranching): Added.
20534         (EmitContext.IsVariableAssigned): Added.
20535         (EmitContext.SetVariableAssigned): Added.
20536         (EmitContext.IsParameterAssigned): Added.
20537         (EmitContext.SetParameterAssigned): Added.
20538         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
20539         Added control flow analysis stuff here.
20540
20541         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
20542         resolve the expression as lvalue.
20543         (LocalVariableReference.DoResolve): Check whether the variable has
20544         already been assigned.
20545         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
20546         the parameter as assigned here.
20547         (ParameterReference.DoResolve): Check whether the parameter has already
20548         been assigned.
20549         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
20550         expression as lvalue.
20551
20552         * statement.cs (FlowBranching): New class for the flow analysis code.
20553         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
20554         (LabeledStatement.IsDefined): New public property.
20555         (LabeledStatement.AddUsageVector): New public method to tell flow
20556         analyis that the label may be reached via a forward jump.
20557         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
20558         flow analysis.
20559         (VariableInfo.Number): New public field.  This is used by flow analysis
20560         to number all locals of a block.
20561         (Block.CountVariables): New public property.  This is the number of
20562         local variables in this block (including the locals from all parent
20563         blocks).
20564         (Block.EmitMeta): Number all the variables.
20565
20566         * statement.cs: Added flow analysis support to all classes.
20567
20568 2002-07-31  Martin Baulig  <martin@gnome.org>
20569
20570         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
20571         To get debugging messages, compile mcs with /define:MCS_DEBUG and
20572         then use this argument.
20573
20574         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
20575
20576         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
20577         use this to specify /define options.
20578
20579 2002-07-29  Martin Baulig  <martin@gnome.org>
20580
20581         * statement.cs (Fixed): Moved all code that does variable lookups
20582         and resolvings from Emit to Resolve.
20583
20584         * statement.cs (For): Moved all code that does variable lookups
20585         and resolvings from Emit to Resolve.
20586
20587         * statement.cs (Using): Moved all code that does variable lookups
20588         and resolvings from Emit to Resolve.
20589
20590 2002-07-29  Martin Baulig  <martin@gnome.org>
20591
20592         * attribute.cs (Attribute.Resolve): Explicitly catch a
20593         System.NullReferenceException when creating the
20594         CustromAttributeBuilder and report a different warning message.
20595
20596 2002-07-29  Martin Baulig  <martin@gnome.org>
20597
20598         * support.cs (ParameterData.ParameterName): Added method to
20599         get the name of a parameter.
20600
20601         * typemanager.cs (TypeManager.IsValueType): New public method.
20602
20603 2002-07-29  Martin Baulig  <martin@gnome.org>
20604
20605         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
20606         is a flag which specifies that it's either ref or out.
20607         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
20608         the out parameter to `out Parameter.Modifier mod', also set the
20609         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
20610
20611         * support.cs (InternalParameters.ParameterModifier): Distinguish
20612         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
20613         Parameter.Modifier.ISBYREF flag if it's either ref or out.
20614
20615         * expression.cs (Argument.GetParameterModifier): Distinguish
20616         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
20617         Parameter.Modifier.ISBYREF flag if it's either ref or out.
20618
20619 2002-07-29  Martin Baulig  <martin@gnome.org>
20620
20621         * expression.cs (ParameterReference.ParameterReference): Added
20622         `Location loc' argument to the constructor.
20623
20624         * cs-parser.jay: Pass location to ParameterReference.
20625
20626 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
20627
20628         * statement.cs (Try): Initialize the location.
20629
20630         * cs-parser.jay: pass location to Try.
20631
20632         * expression.cs (Unary.Reduce): Change the prototype to return
20633         whether a constant fold could be performed or not.  The result is
20634         returned in an out parameters.  In the case of Indirection and
20635         AddressOf, we want to perform the full tests.
20636
20637 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
20638
20639         * statement.cs (Statement.Emit): Flag dead code.
20640
20641 2002-07-27  Andrew Birkett  <andy@nobugs.org>
20642
20643         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
20644
20645 2002-07-27  Martin Baulig  <martin@gnome.org>
20646
20647         * class.cs (MethodData.Define): Put back call to
20648         TypeManager.AddMethod(), accidentally commented this out.
20649
20650         * report.cs (Debug): New public method to print debugging information,
20651         this is `[Conditional ("DEBUG")]'.
20652
20653 2002-07-26  Martin Baulig  <martin@gnome.org>
20654
20655         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
20656         (switch_statement): Push the current_block to the switch_stack and
20657         pop it again when we're done with the switch.
20658         (switch_section): The new block is a child of the current_block.
20659         Fixes bug #24007, added test-152.cs.
20660
20661 2002-07-27  Martin Baulig  <martin@gnome.org>
20662
20663         * expression.cs (Invocation.EmitArguments): When calling a varargs
20664         function with only its fixed arguments, we need to pass an empty
20665         array.
20666
20667 2002-07-27  Martin Baulig  <martin@gnome.org>
20668
20669         Mono 0.13 has been released.
20670
20671 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
20672
20673         * driver.cs: Rename --resource to --linkres, because that is what
20674         we do currently, we dont support --resource yet.
20675
20676         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
20677
20678 2002-07-25  Martin Baulig  <martin@gnome.org>
20679
20680         * class.cs (MethodData): New public class.  This is a `method builder'
20681         class for a method or one accessor of a Property/Indexer/Event.
20682         (MethodData.GetMethodFlags): Moved here from MemberBase.
20683         (MethodData.ApplyAttributes): Likewise.
20684         (MethodData.ApplyObsoleteAttribute): Likewise.
20685         (MethodData.ApplyConditionalAttribute): Likewise.
20686         (MethodData.ApplyDllImportAttribute): Likewise.
20687         (MethodData.CheckAbstractAndExternal): Likewise.
20688         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
20689         (MethodData.Emit): Formerly known as Method.Emit().
20690         (MemberBase): Moved everything which was specific to a single
20691         accessor/method to MethodData.
20692         (Method): Create a new MethodData and call Define() and Emit() on it.
20693         (Property, Indexer, Event): Create a new MethodData objects for each
20694         accessor and call Define() and Emit() on them.
20695
20696 2002-07-25  Martin Baulig  <martin@gnome.org>
20697
20698         Made MethodCore derive from MemberBase to reuse the code from there.
20699         MemberBase now also checks for attributes.
20700
20701         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
20702         (MemberBase.GetMethodFlags): Moved here from class Method and marked
20703         as virtual.
20704         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
20705         `CallingConventions cc' and `Attributes opt_attrs' arguments.
20706         (MemberBase.ApplyAttributes): New virtual method; applies the
20707         attributes to a method or accessor.
20708         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
20709         (MemberBase.ApplyConditionalAttribute): Likewise.
20710         (MemberBase.ApplyDllImportAttribute): Likewise.
20711         (MemberBase.CheckAbstractAndExternal): Likewise.
20712         (MethodCore.ParameterTypes): This is now a property instead of a
20713         method, it's initialized from DoDefineParameters().
20714         (MethodCore.ParameterInfo): Removed the set accessor.
20715         (MethodCore.DoDefineParameters): New protected virtual method to
20716         initialize ParameterTypes and ParameterInfo.
20717         (Method.GetReturnType): We can now simply return the MemberType.
20718         (Method.GetMethodFlags): Override the MemberBase version and add
20719         the conditional flags.
20720         (Method.CheckBase): Moved some code from Define() here, call
20721         DoDefineParameters() here.
20722         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
20723         here to avoid some larger code duplication.
20724         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
20725         ensure that abstract and external accessors don't declare a body.
20726
20727         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
20728         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
20729         lookup in the attribute's parent classes, so we need to abort as soon
20730         as we found the first match.
20731         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
20732         the attribute has no arguments.
20733
20734         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
20735         of a Method.
20736
20737 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20738
20739         * cs-parser.jay: reverted previous patch.
20740
20741 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20742
20743         * cs-parser.jay: fixed bug #22119.
20744
20745 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20746
20747         * attribute.cs: fixed compilation. The error was:
20748         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
20749         be assigned to before control leaves the current method."
20750         [FIXME:  Filed as bug #28186: MCS must report this error.]
20751
20752 2002-07-25  Martin Baulig  <martin@gnome.org>
20753
20754         * attribute.cs (Attribute.Conditional_GetConditionName): New static
20755         method to pull the condition name ouf of a Conditional attribute.
20756         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
20757         the obsolete message and error flag out of an Obsolete attribute.
20758
20759         * class.cs (Method.GetMethodFlags): New public method to get the
20760         TypeManager.MethodFlags for this method.
20761         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
20762         private methods.
20763         (Method.Define): Get and apply the Obsolete and Conditional attributes;
20764         if we're overriding a virtual function, set the new private variable
20765         `parent_method'; call the new TypeManager.AddMethod().
20766
20767         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
20768         the MethodBuilder and the Method in a PtrHashtable.
20769         (TypeManager.builder_to_method): Added for this purpose.
20770         (TypeManager.MethodFlags): Added IsObsoleteError.
20771         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
20772         Obsolete and Conditional arguments in MethodBuilders.  If we discover
20773         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
20774         the message from the attribute.
20775
20776 2002-07-24  Martin Baulig  <martin@gnome.org>
20777
20778         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
20779         preprocessor directives, ensure that the argument to #define/#undef is
20780         exactly one identifier and that it's actually an identifier.
20781
20782         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
20783         did not work ....
20784
20785 2002-07-24  Martin Baulig  <martin@gnome.org>
20786
20787         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
20788         initialize it to TypeManager.object_type in the constructor.
20789         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
20790         of the `hm.get_current' method if we're using the collection pattern.
20791         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
20792         for the explicit conversion to make it work when we're using the collection
20793         pattern and the `Current' property has a different return type than `object'.
20794         Fixes #27713.
20795
20796 2002-07-24  Martin Baulig  <martin@gnome.org>
20797
20798         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
20799         does not match, but don't report any errors.  This method is called in
20800         order for all methods in a MethodGroupExpr until a matching method is
20801         found, so we don't want to bail out if the first method doesn't match.
20802         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
20803         matches, report the 123.  Fixes #28070.
20804
20805 2002-07-24  Martin Baulig  <martin@gnome.org>
20806
20807         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
20808         TypeManager.TypeToCoreType() to the top of the method so the
20809         following equality checks will work.  Fixes #28107.
20810
20811 2002-07-24  Martin Baulig  <martin@gnome.org>
20812
20813         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
20814         operand is of type uint, and the other operand is of type sbyte,
20815         short or int, the operands are converted to type long." -
20816         Actually do what this comment already told us.  Fixes bug #28106,
20817         added test-150.cs.
20818
20819 2002-07-24  Martin Baulig  <martin@gnome.org>
20820
20821         * class.cs (MethodBase): New abstract class.  This is now a base
20822         class for Property, Indexer and Event to avoid some code duplication
20823         in their Define() and DefineMethods() methods.
20824         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
20825         generic methods for Define() and DefineMethods().
20826         (FieldBase): Derive from MemberBase, not MemberCore.
20827         (Property): Derive from MemberBase, not MemberCore.
20828         (Property.DefineMethod): Moved all the code from this method to the
20829         new MethodBase.DefineAccessor(), just call it with appropriate
20830         argumetnts.
20831         (Property.Define): Call the new Property.DoDefine(), this does some
20832         sanity checks and we don't need to duplicate the code everywhere.
20833         (Event): Derive from MemberBase, not MemberCore.
20834         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
20835         accessors, this will also make them work with interface events.
20836         (Indexer): Derive from MemberBase, not MemberCore.
20837         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
20838         (Indexer.Define): Use the new MethodBase functions.
20839
20840         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
20841         argument to the constructor.
20842         (Interface.FindMembers): Added support for interface events.
20843         (Interface.PopluateEvent): Implemented.
20844
20845         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
20846
20847 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
20848
20849         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
20850         but this is required to check for a method name being the same as
20851         the containing class.  
20852
20853         Handle this now.
20854
20855 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20856
20857         * interface.cs: initialize variable.
20858
20859 2002-07-23  Martin Baulig  <martin@gnome.org>
20860
20861         Implemented the IndexerName attribute in interfaces.
20862
20863         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
20864         name if this is an explicit interface implementation.
20865         (Indexer.InterfaceIndexerName): New public variable.  If we're
20866         implementing an interface indexer, this is the IndexerName in that
20867         interface.  Otherwise, it's the IndexerName.
20868         (Indexer.DefineMethod): If we're implementing interface indexer,
20869         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
20870         and Pending.ImplementIndexer methods.
20871         (Indexer.Define): Also define the PropertyBuilder if we're
20872         implementing an interface indexer and this is neither an explicit
20873         interface implementation nor do the IndexerName match the one in
20874         the interface.
20875
20876         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
20877         If a method is defined here, then we always need to create a proxy
20878         for it.  This is used when implementing interface indexers.
20879         (Pending.IsInterfaceIndexer): New public method.
20880         (Pending.ImplementIndexer): New public method.
20881         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
20882         This is used when implementing interface indexers to define a proxy
20883         if necessary.
20884         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
20885         define a proxy if necessary.
20886
20887         * interface.cs (Interface.IndexerName): New public variable.
20888         (Interface.PopulateIndexer): Set the IndexerName.
20889         (Interface.DefineIndexers): New private method.  Populate all the
20890         indexers and make sure their IndexerNames match.
20891
20892         * typemanager.cs (IndexerPropertyName): Added support for interface
20893         indexers.
20894
20895 2002-07-22  Martin Baulig  <martin@gnome.org>
20896
20897         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
20898         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
20899         ret if HasReturnLabel.
20900         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
20901         variables.
20902
20903         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
20904         and set the ec.LoopBeginTryCatchLevel.
20905         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
20906         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
20907         the current ec.TryCatchLevel, the branch goes out of an exception
20908         block.  In this case, we need to use Leave and not Br.
20909
20910 2002-07-22  Martin Baulig  <martin@gnome.org>
20911
20912         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
20913         block unless the block does not always return or it is contained in
20914         another try { ... } catch { ... } block.  Fixes bug #26506.
20915         Added verify-1.cs to the test suite.
20916
20917 2002-07-22  Martin Baulig  <martin@gnome.org>
20918
20919         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
20920         then we do not always return.  Fixes bug #24985.
20921
20922 2002-07-22  Martin Baulig  <martin@gnome.org>
20923
20924         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
20925         lookup on a per-class level; ie. walk up the class hierarchy until we
20926         found at least one applicable method, then choose the best among them.
20927         Fixes bug #24463 and test-29.cs.
20928
20929 2002-07-22  Martin Baulig  <martin@gnome.org>
20930
20931         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
20932         return types of the methods.  The return type is not part of the
20933         signature and we must not check it to make the `new' modifier work.
20934         Fixes bug #27999, also added test-147.cs.
20935         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
20936
20937         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
20938         on the method's return type.
20939
20940 2002-07-21  Martin Baulig  <martin@gnome.org>
20941
20942         * assign.cs: Make this work if the rightmost source is a constant and
20943         we need to do an implicit type conversion.  Also adding a few more tests
20944         to test-38.cs which should have caught this.
20945
20946         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
20947         target in the makefile for this.  The makefile.gnu is primarily intended
20948         for end-users who don't want to debug the compiler.
20949
20950 2002-07-21  Martin Baulig  <martin@gnome.org>
20951
20952         * assign.cs: Improved the Assign class so it can now handle embedded
20953         assignments (X = Y = Z = something).  As a side-effect this'll now also
20954         consume less local variables.  test-38.cs now passes with MCS, added
20955         a few new test cases to that test.
20956
20957 2002-07-20  Martin Baulig  <martin@gnome.org>
20958
20959         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
20960         instructions.  Fixes bug #27977, also added test-146.cs.
20961
20962 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20963
20964         * cs-tokenizer.cs: fixed getHex ().
20965
20966 2002-07-19  Martin Baulig  <martin@gnome.org>
20967
20968         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
20969         not Type.GetType() to lookup the array type.  This is needed when
20970         we're constructing an array of a user-defined type.
20971         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
20972         single-dimensional arrays, but also for single-dimensial arrays of
20973         type decimal.
20974
20975 2002-07-19  Martin Baulig  <martin@gnome.org>
20976
20977         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
20978         this function is called, it's not allowed to share LocalBuilders
20979         among ILGenerators.
20980
20981 2002-07-19  Martin Baulig  <martin@gnome.org>
20982
20983         * expression.cs (Argument.Resolve): Report an error 118 when trying
20984         to pass a type as argument.
20985
20986 2002-07-18  Martin Baulig  <martin@gnome.org>
20987
20988         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
20989         Conv_R_Un for the signed `long' type.
20990
20991 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
20992
20993         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
20994         `expr' for the temporary result, as that will fail if we do
20995         multiple resolves on the same expression.
20996
20997 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
20998
20999         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
21000         ec.TypeContainer for looking up aliases. 
21001
21002         * class.cs (TypeContainer): Remove LookupAlias from here.
21003
21004         * decl.cs (DeclSpace); Move here.
21005
21006 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
21007
21008         * class.cs (FindMembers): Only call filter if the constructor
21009         bulider is not null.
21010
21011         Also handle delegates in `NestedTypes' now.  Now we will perform
21012         type lookups using the standard resolution process.  This also
21013         fixes a bug.
21014
21015         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
21016         This uses Expressions (the limited kind that can be parsed by the
21017         tree) instead of strings.
21018
21019         * expression.cs (ComposedCast.ToString): Implement, used to flag
21020         errors since now we have to render expressions.
21021
21022         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
21023         FormArrayType. 
21024
21025         * ecore.cs (SimpleName.ToString): ditto.
21026
21027         * cs-parser.jay: Instead of using strings to assemble types, use
21028         Expressions to assemble the type (using SimpleName, ComposedCast,
21029         MemberAccess).  This should fix the type lookups in declarations,
21030         because we were using a different code path for this.
21031
21032         * statement.cs (Block.Resolve): Continue processing statements
21033         even when there is an error.
21034
21035 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
21036
21037         * class.cs (Event.Define): Also remove the `remove' method from
21038         the list of pending items.
21039
21040         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
21041         generate more compact code. 
21042
21043 2002-07-17  Martin Baulig  <martin@gnome.org>
21044
21045         * const.cs (Const.LookupConstantValue): Add support for constant
21046         `unchecked' and `checked' expressions.
21047         Also adding test case test-140.cs for this.
21048
21049 2002-07-17  Martin Baulig  <martin@gnome.org>
21050
21051         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
21052         check whether mi.ReturnType implements the IEnumerator interface; the
21053         `==' and the IsAssignableFrom() will fail in this situation.
21054
21055 2002-07-16  Ravi Pratap  <ravi@ximian.com>
21056
21057         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
21058         here too.
21059
21060 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21061
21062         * expression.cs: fixed bug #27811.
21063
21064 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
21065
21066         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
21067         Molaro: when we are a ref, the value already contains a pointer
21068         value, do not take the address of it.
21069
21070 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
21071         * removed mb-parser.jay and mb-tokenizer.cs
21072
21073 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
21074
21075         * expression.cs: check against the building corlib void type.
21076
21077 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
21078
21079         * ecore.cs: fix for valuetype static readonly fields: when 
21080         initializing them, we need their address, not the address of a copy.
21081
21082 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
21083
21084         * typemanager.cs: register also enum_type in corlib.
21085
21086 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
21087
21088         * class.cs: allow calling this (but not base) initializers in structs.
21089
21090 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
21091
21092         * ecore.cs: make sure we compare against the building base types
21093         in GetTypeSize ().
21094
21095 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
21096
21097         * typemanager.cs: fix TypeToCoreType() to handle void and object
21098         (corlib gets no more typerefs after this change).
21099
21100 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
21101
21102         * expression.cs (ArrayCreation.EmitArrayArguments): use
21103         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
21104
21105         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
21106         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
21107         array indexes, the runtime actually forbids them.
21108
21109         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
21110         for array arguments here.
21111
21112         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
21113         instead of the default for ValueTypes.
21114
21115         (New.DoEmit): Use IsValueType instead of
21116         IsSubclassOf (value_type)
21117         (New.DoResolve): ditto.
21118         (Invocation.EmitCall): ditto.
21119
21120         * assign.cs (Assign): ditto.
21121
21122         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
21123         Statements *are* currently doing part of their resolution during
21124         Emit.  
21125
21126         Expressions do always resolve during resolve, but statements are
21127         only required to propagate resolution to their children.
21128
21129 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
21130
21131         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
21132
21133         (LoadAssembly): Do not add the dll if it is already specified
21134
21135         (MainDriver): Add the System directory to the link path at the end,
21136         after all the other -L arguments. 
21137
21138         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
21139         wrong opcode for loading bytes and bools (ldelem.i1 instead of
21140         ldelem.u1) and using the opposite for sbytes.
21141
21142         This fixes Digger, and we can finally run it.
21143
21144         * driver.cs (UnixParseOption): Move the option parsing here.  
21145         (CSCParseOption): Implement CSC-like parsing of options.
21146
21147         We now support both modes of operation, the old Unix way, and the
21148         new CSC-like way.  This should help those who wanted to make cross
21149         platform makefiles.
21150
21151         The only thing broken is that /r:, /reference: and /lib: are not
21152         implemented, because I want to make those have the same semantics
21153         as the CSC compiler has, and kill once and for all the confussion
21154         around this.   Will be doing this tomorrow.
21155
21156         * statement.cs (Unsafe.Resolve): The state is checked during
21157         resolve, not emit, so we have to set the flags for IsUnsfe here.
21158
21159 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
21160
21161         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
21162         not catch the Error_ObjectRefRequired in SimpleName (as it is
21163         possible to have a class/instance variable name that later gets
21164         deambiguated), we have to check this here.      
21165
21166 2002-07-10  Ravi Pratap  <ravi@ximian.com>
21167
21168         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
21169         make static and put into Expression.
21170
21171         (Event.Define): Register the private field of the event with the 
21172         TypeManager so that GetFieldFromEvent can get at it.
21173
21174         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
21175         keep track of the private field associated with an event which
21176         has no accessors.
21177
21178         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
21179         private field.
21180
21181         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
21182
21183 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
21184
21185         * expression.cs (Binary.EmitBranchable): this routine emits the
21186         Binary expression in a branchable context.  This basically means:
21187         we need to branch somewhere, not just get the value on the stack.
21188
21189         This works together with Statement.EmitBoolExpression.
21190
21191         * statement.cs (Statement.EmitBoolExpression): Use
21192         EmitBranchable. 
21193
21194 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
21195
21196         * statement.cs (For): Reduce the number of jumps in loops.
21197
21198         (For): Implement loop inversion for the For statement.
21199
21200         (Break): We can be breaking out of a Try/Catch controlled section
21201         (foreach might have an implicit try/catch clause), so we need to
21202         use Leave instead of Br.
21203
21204         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
21205         now).  If the instace expression supports IMemoryLocation, we use
21206         the AddressOf method from the IMemoryLocation to extract the
21207         address instead of emitting the instance.
21208
21209         This showed up with `This', as we were emitting the instance
21210         always (Emit) instead of the Address of This.  Particularly
21211         interesting when This is a value type, as we dont want the Emit
21212         effect (which was to load the object).
21213
21214 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
21215
21216         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
21217
21218         * statement.cs (Checked): Set the CheckedState during the resolve
21219         process too, as the ConvCast operations track the checked state on
21220         the resolve process, and not emit.
21221
21222         * cs-parser.jay (namespace_member_declaration): Flag that we have
21223         found a declaration when we do.  This is used to flag error 1529
21224
21225         * driver.cs: Report ok when we display the help only.
21226
21227 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
21228
21229         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
21230
21231 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
21232
21233         * cs-tokenizer.cs (define): We also have to track locally the
21234         defines.  AllDefines is just used for the Conditional Attribute,
21235         but we also need the local defines for the current source code. 
21236
21237 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
21238
21239         * statement.cs (While, For, Do): These loops can exit through a
21240         Break statement, use this information to tell whether the
21241         statement is the last piece of code.
21242
21243         (Break): Flag that we break.
21244
21245         * codegen.cs (EmitContexts): New `Breaks' state variable.
21246
21247 2002-07-03  Martin Baulig  <martin@gnome.org>
21248
21249         * class.cs (TypeContainer.MethodModifiersValid): Allow override
21250         modifiers in method declarations in structs.  Otherwise, you won't
21251         be able to override things like Object.Equals().
21252
21253 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
21254
21255         * class.cs (Method, Property, Indexer): Do not allow the public
21256         modifier to be used in explicit interface implementations.
21257
21258         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
21259         override modifiers in method declarations in structs
21260
21261 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
21262
21263         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
21264         integer or real overflow, report an error
21265
21266 2002-07-02  Martin Baulig  <martin@gnome.org>
21267
21268         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
21269         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
21270         to tell the runtime about our newly created System.Object and
21271         System.ValueType types.
21272
21273 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
21274
21275         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
21276         struct instead of Ldarg/Starg.
21277
21278 2002-07-02  Martin Baulig  <martin@gnome.org>
21279
21280         * expression.cs (Indirection.Indirection): Call
21281         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
21282
21283 2002-07-02  Martin Baulig  <martin@gnome.org>
21284
21285         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
21286         ValueType, call TypeManager.TypeToCoreType() on it.
21287         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
21288         the OpCodes.Newarr argument.
21289
21290 2002-07-02  Martin Baulig  <martin@gnome.org>
21291
21292         * expression.cs (Invocation.EmitCall): When compiling corlib,
21293         replace all calls to the system's System.Array type to calls to
21294         the newly created one.
21295
21296         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
21297         System.Array methods.
21298         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
21299         from the system's System.Array type which must be replaced.
21300
21301 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
21302
21303         * typemanager.cs: load unverifiable_code_ctor so we can build
21304         corlib using the correct type. Avoid using GetTypeCode() with
21305         TypeBuilders.
21306         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
21307         TypeManager.object_type to allow building corlib.
21308
21309 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
21310
21311         * ecore.cs: handle System.Enum separately in LoadFromPtr().
21312
21313 2002-07-01  Martin Baulig  <martin@gnome.org>
21314
21315         * class.cs: Make the last change actually work, we need to check
21316         whether `ifaces != null' to avoid a crash.
21317
21318 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
21319
21320         * class.cs: when we build structs without fields that implement
21321         interfaces, we need to add the interfaces separately, since there is
21322         no API to both set the size and add the interfaces at type creation
21323         time.
21324
21325 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
21326
21327         * expression.cs: the dimension arguments to the array constructors
21328         need to be converted if they are a long.
21329
21330 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
21331
21332         * class.cs: don't emit ldarg.0 if there is no parent constructor
21333         (fixes showstopper for corlib).
21334
21335 2002-06-29  Martin Baulig  <martin@gnome.org>
21336
21337         MCS now compiles corlib on GNU/Linux :-)
21338
21339         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
21340         ie. check for MethodImplOptions.InternalCall.
21341
21342         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
21343         and TypeManager.attribute_type are null, so we must explicitly check
21344         whether parent is not null to find out whether it's an attribute type.
21345         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
21346         and SetBuilder, not only if the property is neither abstract nor external.
21347         This is necessary to set the MethodImplOptions on the accessor methods.
21348         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
21349         SetBuilder, see Property.Emit().
21350
21351         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
21352         populate "System.Object", "System.ValueType" and "System.Attribute" since
21353         they've already been populated from BootCorlib_PopulateCoreTypes().
21354
21355 2002-06-29  Martin Baulig  <martin@gnome.org>
21356
21357         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
21358         is the NullLiteral, we also need to make sure that target_type is not
21359         an enum type.   
21360
21361 2002-06-29  Martin Baulig  <martin@gnome.org>
21362
21363         * rootcontext.cs (RootContext.ResolveCore): We must initialize
21364         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
21365         before calling BootstrapCorlib_ResolveDelegate ().
21366
21367 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21368
21369         * statement.cs: fixed build-breaker. All tests passed ok.
21370
21371 2002-06-27  Martin Baulig  <martin@gnome.org>
21372
21373         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
21374         for System.Decimal when compiling corlib.
21375
21376 2002-06-27  Martin Baulig  <martin@gnome.org>
21377
21378         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
21379         switch blocks which contain nothing but a default clause.
21380
21381 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
21382
21383        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
21384
21385 2002-06-27  Martin Baulig  <martin@gnome.org>
21386
21387         * ecore.cs (PropertyExpr.PropertyExpr): Call
21388         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
21389
21390         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
21391         is already a TypeBuilder.
21392
21393 2002-06-27  Martin Baulig  <martin@gnome.org>
21394
21395         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
21396         `target_type == TypeManager.array_type', not IsAssignableFrom() in
21397         the "from an array-type to System.Array" case.  This makes it work
21398         when compiling corlib.
21399
21400 2002-06-27  Martin Baulig  <martin@gnome.org>
21401
21402         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
21403         non-static PropertyExpr, set its InstanceExpression.  This makes
21404         the `ICollection.Count' property work in System/Array.cs.
21405
21406 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
21407
21408         * driver.cs: Made error handling more consistent.  Errors now
21409         tracked by Report class, so many methods which used to return int
21410         now return void.  Main() now prints success/failure and 
21411         errors/warnings message.
21412
21413         Renamed '--probe' compiler argument to '--expect-error'.  Removed
21414         the magic number return values (123 and 124).  Now, if the
21415         expected error occurs, the compiler exits with success (exit value
21416         0).  If the compilation completes without seeing that particular
21417         error, the compiler exits with failure (exit value 1).  The
21418         makefile in mcs/errors has been changed to handle the new behaviour.
21419
21420         * report.cs: Made 'expected error' number a property and renamed
21421         it from 'Probe' to 'ExpectedError'.
21422
21423         * genericparser.cs: Removed error handling support, since it is
21424         now all done by Report class.
21425
21426         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
21427         class, so parse() no longer returns an int.
21428
21429         * namespace.cs: Use Report.Error instead of GenericParser.error
21430
21431 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
21432
21433         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
21434         TypeContainer.AddOperator): At the front of the list put the
21435         explicit implementations, so they get resolved/defined first. 
21436
21437 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
21438
21439         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
21440         interface type is implemented by this TypeContainer.  Used during
21441         explicit interface implementation.
21442
21443         (Property.Define, Indexer.Define, Method.Define): Validate that
21444         the given interface in the explicit implementation is one of the
21445         base classes for the containing type.
21446
21447         Also if we are explicitly implementing an interface, but there is
21448         no match in the pending implementation table, report an error.
21449
21450         (Property.Define): Only define the property if we are
21451         not explicitly implementing a property from an interface.  Use the
21452         correct name also for those properties (the same CSC uses,
21453         although that is really not needed).
21454
21455         (Property.Emit): Do not emit attributes for explicitly implemented
21456         properties, as there is no TypeBuilder.
21457
21458         (Indexer.Emit): ditto.
21459
21460         Hiding then means that we do not really *implement* a pending
21461         implementation, which makes code fail.
21462
21463 2002-06-22  Martin Baulig  <martin@gnome.org>
21464
21465         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
21466         the return value of Object.GetType().  [FIXME: we need to do this whenever
21467         we get a type back from the reflection library].
21468
21469 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
21470
21471         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
21472
21473 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
21474
21475         * attribute.cs: Return null if we can not look up the type.
21476
21477         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
21478         the interface types found.
21479
21480         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
21481         interface types found.
21482
21483         * typemanager.cs (GetInterfaces): Make this routine returns alll
21484         the interfaces and work around the lame differences between
21485         System.Type and System.Reflection.Emit.TypeBuilder in the results
21486         result for GetInterfaces.
21487
21488         (ExpandInterfaces): Given an array of interface types, expand and
21489         eliminate repeated ocurrences of an interface.  This expands in
21490         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
21491         be IA, IB, IC.
21492
21493 2002-06-21  Martin Baulig  <martin@gnome.org>
21494
21495         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
21496         on System.Enum.
21497
21498 2002-06-21  Martin Baulig  <martin@gnome.org>
21499
21500         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
21501         and called with one of the core types, return the corresponding typebuilder for
21502         that type.
21503
21504         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
21505         element type.
21506
21507 2002-06-21  Martin Baulig  <martin@gnome.org>
21508
21509         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
21510         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
21511         (Expression.ConvertReferenceExplicit): Likewise.
21512
21513         * expression.cs (ElementAccess.DoResolve): Likewise.
21514         (ElementAccess.DoResolveLValue): Likewise.
21515
21516 2002-06-10  Martin Baulig  <martin@gnome.org>
21517
21518         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
21519         add the "value" parameter to the parameter list.
21520
21521         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
21522         to our caller.
21523
21524 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
21525
21526         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
21527         the argument to an int, uint, long or ulong, per the spec.  Also
21528         catch negative constants in array creation.
21529
21530 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
21531
21532         * class.cs: do not allow the same interface to appear twice in
21533         the definition list.
21534
21535 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
21536
21537         * ecore.cs: don't use ldlen with System.Array.
21538
21539 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
21540
21541         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
21542
21543 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
21544
21545         * modifiers.cs: produce correct field attributes for protected
21546         internal. Easy fix so miguel can work on ther harder stuff:-)
21547
21548 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
21549
21550         * pending.cs: New file.  Move the code from class.cs here.
21551         Support clearning the pending flag for all methods (when not doing
21552         explicit interface implementation).
21553
21554 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
21555
21556         * rootcontext.cs: added a couple more types needed to bootstrap.
21557
21558 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
21559
21560         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
21561         constructor in the type, instead of any constructor in the type
21562         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
21563         a bug in the Mono runtime when applying the params attribute). 
21564
21565 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
21566         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
21567
21568 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
21569
21570         * expression.cs (Unary.ResolveOperator): Use TypeManager
21571         to resolve the type.
21572
21573 2002-06-13  Ravi Pratap  <ravi@ximian.com>
21574
21575         * cs-parser.jay (enum_member_declaration): Pass in the attributes
21576         attached.
21577
21578         * enum.cs (AddEnumMember): Add support to store the attributes associated 
21579         with each member too.
21580
21581         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
21582         field builders too - this takes care of the enum member case.
21583
21584 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
21585
21586         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
21587         address-of operator on both value types and pointers.
21588
21589 2002-06-10  Martin Baulig  <martin@gnome.org>
21590
21591         * interface.cs (Interface.PopulateIndexer): Add the indexer's
21592         PropertyBuilder to the `property_builders' list.
21593
21594         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
21595         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
21596         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
21597         find any indexers which are inherited from an interface.
21598
21599 2002-06-09  Martin Baulig  <martin@gnome.org>
21600
21601         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
21602         the same type as the constant if necessary.  There's also a test-130.cs
21603         for this.
21604
21605         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
21606
21607         * typemanager.cs (TypeManager.ChangeType): Previously known as
21608         Enum.ChangeEnumType().
21609
21610 2002-06-09  Martin Baulig  <martin@gnome.org>
21611
21612         * expression.cs (Cast.TryReduce): Added support for consts.
21613
21614 2002-06-08  Ravi Pratap  <ravi@ximian.com>
21615
21616         * class.cs (Accessor): Hold attributes information so we can pass
21617         it along.
21618
21619         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
21620         Modify to pass in attributes attached to the methods.
21621
21622         (add_accessor_declaration, remove_accessor_declaration): Ditto.
21623
21624         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
21625         to handle the Accessor kind :-)
21626
21627         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
21628
21629 2002-06-08  Martin Baulig  <martin@gnome.org>
21630
21631         * expression.cs (Unary.TryReduceNegative): Added support for
21632         ULongConstants.
21633
21634 2002-06-08  Martin Baulig  <martin@gnome.org>
21635
21636         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
21637         name can't be found in the `defined_names' - the caller will do a
21638         MemberLookup in this case and thus find methods in System.Enum
21639         such as Enum.IsDefined().
21640
21641 2002-06-08  Martin Baulig  <martin@gnome.org>
21642
21643         * enum.cs (Enum.ChangeEnumType): This is a custom version of
21644         Convert.ChangeType() which works with TypeBuilder created types.
21645         (Enum.LookupEnumValue, Enum.Define): Use it here.
21646
21647         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
21648         `TypeBuilder.BaseType != null' check.
21649         (TypeContainer.FindMembers): Only lookup parent members if we
21650         actually have a parent.
21651         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
21652         (ConstructorInitializer.Resolve): Likewise.
21653
21654         * interface.cs (Interface.FindMembers): Added
21655         `TypeBuilder.BaseType != null' check.
21656
21657         * rootcontext.cs (RootContext.ResolveCore): Added
21658         "System.Runtime.CompilerServices.IndexerNameAttribute" to
21659         classes_second_stage.
21660
21661         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
21662         debug_type and trace_type when compiling with --nostdlib.       
21663
21664 2002-06-07  Martin Baulig  <martin@gnome.org>
21665
21666         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
21667         (AddField): Set it to true when adding a non-static field.
21668         (DefineType): Use `have_nonstatic_fields' to find out whether we
21669         have non-static fields, not `Fields != null'.
21670
21671 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
21672
21673         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
21674         dereferencing a null on the static-field code path)
21675
21676 2002-05-30  Martin Baulig  <martin@gnome.org>
21677
21678         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
21679         to take command line arguments.  Use reflection to call the new
21680         custom `Initialize' function on the symbol writer and pass it the
21681         command line arguments.
21682
21683         * driver.cs (--debug-args): New command line argument to pass command
21684         line arguments to the symbol writer.
21685
21686 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
21687
21688         * assign.cs (DoResolve): Forgot to do the implicit conversion to
21689         the target type for indexers and properties.  Thanks to Joe for
21690         catching this.
21691
21692 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
21693
21694         * typemanager.cs (MethodFlags): returns the method flags
21695         (Obsolete/ShouldIgnore) that control warning emission and whether
21696         the invocation should be made, or ignored. 
21697
21698         * expression.cs (Invocation.Emit): Remove previous hack, we should
21699         not do this on matching a base type, we should do this based on an attribute
21700
21701         Only emit calls to System.Diagnostics.Debug and
21702         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
21703         on the command line.
21704
21705         * rootcontext.cs: Global settings for tracing and debugging.
21706
21707         * cs-tokenizer.cs (define): New utility function to track
21708         defines.   Set the global settings for TRACE and DEBUG if found.
21709
21710 2002-05-25  Ravi Pratap  <ravi@ximian.com>
21711
21712         * interface.cs (Populate*): Pass in the TypeContainer as well as
21713         the DeclSpace as parameters so that we can create EmitContexts and
21714         then use that to apply attributes etc.
21715
21716         (PopulateMethod, PopulateEvent, PopulateProperty)
21717         (PopulateIndexer): Apply attributes everywhere.
21718
21719         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
21720         etc.
21721
21722         (ApplyAttributes): Update accordingly.
21723
21724         We now apply interface attributes for all members too.
21725
21726 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
21727
21728         * class.cs (Indexer.Define); Correctly check if we are explicit
21729         implementation (instead of checking the Name for a ".", we
21730         directly look up if the InterfaceType was specified).
21731
21732         Delay the creation of the PropertyBuilder.
21733
21734         Only create the PropertyBuilder if we are not an explicit
21735         interface implementation.   This means that explicit interface
21736         implementation members do not participate in regular function
21737         lookups, and hence fixes another major ambiguity problem in
21738         overload resolution (that was the visible effect).
21739
21740         (DefineMethod): Return whether we are doing an interface
21741         implementation. 
21742
21743         * typemanager.cs: Temporary hack until we get attributes in
21744         interfaces (Ravi is working on that) and we get IndexerName
21745         support in interfaces.
21746
21747         * interface.cs: Register the indexers as properties.
21748
21749         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
21750         warning, I have verified that this is a bug in the .NET runtime
21751         (JavaScript suffers of the same problem).
21752
21753         * typemanager.cs (MemberLookup): When looking up members for
21754         interfaces, the parent of an interface is the implicit
21755         System.Object (so we succeed in searches of Object methods in an
21756         interface method invocation.  Example:  IEnumerable x;  x.ToString
21757         ()) 
21758
21759 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
21760
21761         * class.cs (Event): Events should also register if they do
21762         implement the methods that an interface requires.
21763
21764         * typemanager.cs (MemberLookup); use the new GetInterfaces
21765         method. 
21766
21767         (GetInterfaces): The code used to lookup interfaces for a type is
21768         used in more than one place, factor it here. 
21769
21770         * driver.cs: Track the errors at the bottom of the file, we kept
21771         on going.
21772
21773         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
21774         instance if the method we are calling is static!
21775
21776 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
21777
21778         * attribute.cs (ApplyAttributes): Make this function filter out
21779         the IndexerName attribute (as that attribute in reality is never
21780         applied) and return the string constant for the IndexerName
21781         attribute. 
21782
21783         * class.cs (TypeContainer.Emit): Validate that all the indexers
21784         have the same IndexerName attribute, and if so, set the
21785         DefaultName attribute on the class. 
21786
21787         * typemanager.cs: The return value might contain other stuff (not
21788         only methods).  For instance, consider a method with an "Item"
21789         property and an Item method.
21790
21791         * class.cs: If there is a problem with the parameter types,
21792         return. 
21793
21794 2002-05-24  Ravi Pratap  <ravi@ximian.com>
21795
21796         * ecore.cs (ImplicitConversionExists): Wrapper function which also
21797         looks at user defined conversion after making a call to 
21798         StandardConversionExists - we need this for overload resolution.
21799
21800         * expression.cs : Update accordingly the various method calls.
21801
21802         This fixes 2 bugs filed against implicit user defined conversions 
21803
21804 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
21805
21806         * statement.cs: Track the result of the assignment.
21807
21808 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
21809
21810         * expression.cs (MemberAccess): Improved error reporting for
21811         inaccessible members.
21812
21813 2002-05-22  Martin Baulig  <martin@gnome.org>
21814
21815         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
21816         itself with debugging support.
21817
21818 2002-05-22  Martin Baulig  <martin@gnome.org>
21819
21820         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
21821         Removed, this isn't needed anymore.
21822
21823 2002-05-20  Martin Baulig  <martin@gnome.org>
21824
21825         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
21826         be underlying type for an enum.
21827
21828 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
21829
21830         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
21831         that splits out the loading of just the core types.
21832
21833         * rootcontext.cs (ResolveCore): Split the struct resolution in
21834         two, so we can load the enumeration underlying types before any
21835         enums are used.
21836
21837         * expression.cs (Is): Bandaid until we fix properly Switch (see
21838         bug #24985 for details).
21839
21840         * typemanager.cs (ImplementsInterface): The hashtable will contain
21841         a null if there are no interfaces implemented.
21842
21843 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
21844
21845         * cs-parser.jay (indexer_declarator): It is fine to have array
21846         parameters
21847
21848 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
21849
21850         * typemanager.cs: (RegisterBuilder): New function used to register
21851         TypeBuilders that implement interfaces.  Since
21852         TypeBuilder.GetInterfaces (as usual) does not work with lame
21853         Reflection.Emit. 
21854         (AddUserType): register interfaces.
21855
21856         (ImplementsInterface): Use the builder_to_ifaces hash if we are
21857         dealing with TypeBuilder.  Also, arrays are showing up as
21858         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
21859         methods can not be invoked on them!
21860
21861         * ecore.cs (ExplicitReferenceConversionExists): Made public.
21862         (ImplicitReferenceConversionExists): Split out from
21863         StandardConversionExists. 
21864
21865         * expression.cs (As): We were only implementing one of the three
21866         cases for the as operator.  We now implement them all.
21867         (Is): Implement the various other cases for Is as well.
21868
21869         * typemanager.cs (CACHE): New define used to control if we want or
21870         not the FindMembers cache.  Seems to have a negative impact on
21871         performance currently
21872
21873         (MemberLookup): Nested types have full acess to
21874         enclosing type members
21875
21876         Remove code that coped with instance/static returns for events, we
21877         now catch this in RealFindMembers.
21878
21879         (RealFindMembers): only perform static lookup if the instance
21880         lookup did not return a type or an event.  
21881
21882 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
21883
21884         * assign.cs (CompoundAssign): We pass more semantic information
21885         now to Compound Assignments than we did before: now we have all
21886         the information at hand, and now we resolve the target *before* we
21887         do the expression expansion, which allows the "CacheValue" method
21888         to have the effect we intended (before, a [x] += 1 would generate
21889         two differen ArrayAccess expressions from the ElementAccess,
21890         during the resolution process).
21891
21892         (CompoundAssign.DoResolve): Resolve target and original_source here.
21893
21894 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
21895
21896         * expression.cs (ArrayAccess): dropped debugging information. 
21897
21898         * typemanager.cs: Small bug fix: I was always returning i_members,
21899         instead of one of i_members or s_members (depending on which had
21900         the content).
21901
21902         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
21903         method is invoked before any code generation takes place, and it
21904         is a mechanism to inform that the expression will be invoked more
21905         than once, and that the method should use temporary values to
21906         avoid having side effects
21907
21908         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
21909
21910         * ecore.cs (Expression.CacheTemporaries): Provide empty default
21911         implementation.
21912
21913         * expression.cs (Indirection, ArrayAccess): Add support for
21914         CacheTemporaries in these two bad boys. 
21915
21916         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
21917         ldobj or ldind_ref.  
21918         (StoreFromPtr): Handle stobj as well.
21919
21920         * expression.cs (UnaryMutator): Share more code.
21921
21922         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
21923         down: I was not tracking the Filter function as well, which
21924         was affecting the results of the cache.
21925
21926 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
21927
21928         * attribute.cs: Remove the hack to handle the CharSet property on
21929         StructLayouts. 
21930
21931 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
21932
21933         * attribute.cs (DoResolve): More uglyness, we now only try to
21934         resolve the attribute partially, to extract the CharSet
21935         information (only if we are a StructLayout attribute).  Otherwise 
21936
21937         (GetExtraTypeInfo): Add some code to conditionally kill in the
21938         future this.   I am more and more convinced that the .NET
21939         framework has special code to handle the attribute setting on
21940         certain elements.
21941
21942         * expression.cs (IsParamsMethodApplicable): Revert my previous
21943         foreach change here, it was wrong.
21944
21945 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
21946
21947         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
21948         (pp_expr): do not abort on unknown input, just return.
21949         (eval): abort if there are pending chars.
21950
21951         * attribute.cs (Attribute.Resolve): Positional parameters are
21952         optional.  Deal with that case.
21953
21954         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
21955         the Ansi/Unicode/Auto information for the type.
21956
21957         (TypeContainer.DefineType): instantiate the EmitContext here, as
21958         we will be using it during the type definition (to resolve
21959         attributes) and during the emit phase.
21960
21961         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
21962         to pull type information out of the attributes
21963
21964         (Attribute.Resolve): track the constructor builder, and allow for
21965         multiple invocations (structs and classes will use this).
21966
21967         * ecore.cs (MemberLookupFinal): new version with all the
21968         parameters customizable.
21969
21970         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
21971         constructors.  Return if the result value is null (as the error
21972         would have been flagged already by MemberLookupFinal)
21973
21974         Do not allow instances of abstract classes or interfaces to be
21975         created.
21976
21977         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
21978         We have to compare the assembly property here when dealing with
21979         FamANDAssem and Assembly access modifiers, because we might be
21980         creating an assembly from *modules* (that means that we are not
21981         getting TypeBuilders for types defined in other modules that are
21982         part of this assembly).
21983
21984         (Method.Emit): If the method is marked abstract and has a body,
21985         emit an error. 
21986
21987         (TypeContainer.DefineMembers): If both the defined member and the
21988         parent name match are methods, then do not emit any warnings: let
21989         the Method.Define routine take care of flagging warnings.  But if
21990         there is a mismatch (method overrides something else, or method is
21991         overriwritten by something, then emit warning).
21992
21993         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
21994         set to null, this means `do not check for the return type on the
21995         signature'. 
21996
21997         (Method.Define): set the return type for the method signature to
21998         null, so that we get methods with the same name and parameters and
21999         different return types.  This is used to flag warning 114 (you are
22000         hiding a method, and you probably want to use the new/override
22001         keywords instead).
22002
22003         * typemanager.cs (MemberLookup): Implemented proper access
22004         control, closing a long standing set of bug reports.  The problem
22005         was that the Framework only has two bits: Public and NonPublic,
22006         and NonPublic includes private and protected methods, but we need
22007         to enforce the FamANDAssem, FamOrAssem and Family. 
22008
22009 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
22010
22011         * statement.cs (GotoCase): Return true: Ammounts to giving up
22012         knowledge on whether we return or not, and letting the other case
22013         be responsible for it.
22014
22015 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
22016
22017         * driver.cs: Do not load directories for each file processed, only
22018         do it if there is a pattern.
22019
22020         * ecore.cs: Report readonly assigns here as well, as we might have
22021         been resolved only by MemberAccess.
22022
22023         (SimpleName.SimpleNameResolve): Also be useful for LValue
22024         resolution.   We need this to propagate assign to local readonly variables
22025
22026         * typemanager.cs: Use a ptrhashtable for the criteria, because we
22027         do not want to reuse potential criteria memory.
22028
22029         * class.cs (MyEventBuilder): Set reflected_type;
22030
22031         * ecore.cs (Constantify): Added support for constifying bools.
22032
22033         (RootContext.LookupType): Added a cache for values looked up in
22034         the declaration space.
22035
22036         * typemanager.cs (FindMembers): Now is a front-end to
22037         RealFindMembers, and provides a two-level hashtable-based cache to
22038         the request.  
22039
22040         15% performance improvement: from 22.5 to 19.2 seconds.
22041
22042         * expression.cs (IsParamsMethodApplicable): use foreach.
22043         (Invocation.DoResolve): ditto.
22044         (New.DoResolve): ditto.
22045         (ArrayCreation.DoResolve): ditto.
22046
22047         * ecore.cs (FindMostEncompassingType): use foreach.
22048
22049         * delegate.cs (NewDelegate.DoResolve): Use foreach
22050
22051         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
22052         (RemoveMethods): use foreach.
22053
22054         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
22055         nested foreach statements instead of for, and also break out of
22056         the inner loop once a match is found.
22057
22058         (Invocation.OverloadResolve): Use foreach, simplify the code. 
22059
22060 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
22061
22062         * cfold.cs (BinaryFold): During an enumeration evaluation context,
22063         we actually unwrap the expression to allow for extra information
22064         to be extracted. 
22065
22066         * expression.cs: Use Shr_Un on unsigned operations. 
22067
22068 2002-05-08  Ravi Pratap  <ravi@ximian.com>
22069
22070         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
22071         applicable operators was not being considered correctly. This closes
22072         the bug Miguel reported.
22073
22074 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
22075
22076         * attribute.cs: check that the type derives from System.Attribute
22077         and report the correct error in that case (moved the duplicate code to
22078         its own method, too).
22079
22080 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
22081
22082         * attribute.cs: lookup attribute type name as the spec says: first the
22083         bare attribute name and then name + "Attribute" (nant compiles with
22084         mcs after this fix).
22085
22086 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
22087
22088         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
22089         Because of the way we parse things, we should try to see if a
22090         UIntConstant can fit in an integer.
22091
22092 2002-05-07  Ravi Pratap  <ravi@ximian.com>
22093
22094         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
22095         when we are in an explicit context.
22096
22097         (ConvertReferenceExplicit): When converting from Iface type S to Class
22098         T make sure the rules are implemented as an OR.
22099
22100         * parameter.cs (ParameterType): Make it a property for now although the
22101         purpose really isn't anything immediate.
22102
22103         * expression.cs (Is*Applicable): Do better checking on the parameter type
22104         of a ref/out parameter. The ones from the system assemblies are already 
22105         marked with the correct type so we don't need to do any correction.
22106
22107         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
22108         the object type is standard too so include that.
22109
22110 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
22111
22112         * ecore.cs (StandardConversionExists): Augment with missing code:
22113         deal with IntConstant, LongConstants and Enumerations.
22114
22115         * assign.cs: Report the error, instead of failing silently
22116
22117         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
22118         typecontainer that they are declared, because the
22119         typecontainer/namespace will have the list of using clauses that
22120         need to be applied.
22121
22122         Assembly Attributes were escaping the normal registration
22123         mechanism. 
22124
22125         (EmitCode): Apply attributes within an EmitContext that represents
22126         the container they were declared on.
22127
22128         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
22129
22130 2002-05-06  Ravi Pratap  <ravi@ximian.com>
22131
22132         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
22133         Revamp completely - make much cleaner as we now operate only
22134         on a set of Types.
22135
22136         (FindMostSpecificSource, FindMostSpecificTarget): New methods
22137         to implement the logic detailed in the spec more correctly.
22138
22139         (UserDefinedConversion): Update accordingly.
22140
22141 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
22142
22143         * statement.cs: Return flow analysis information up.
22144
22145         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
22146         and the default.
22147
22148         (token): Do not consume an extra character before calling
22149         decimal_digits.
22150
22151 2002-05-06  Piers Haken <piersh@friskit.com>
22152
22153         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
22154
22155 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
22156
22157         * class.cs (Constructor.Emit): Set the IsStatic flag in the
22158         EmitContext during the instance constructor initializer
22159         resolution, to stop access to instance variables.
22160
22161         This is mandated by the spec, last paragraph of the `constructor
22162         initializers' section. 
22163
22164 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
22165
22166         * cs-parser.jay, class.cs (Accessor): new class used to represent
22167         an accessor (get or set).  In the past we used `null' to represent
22168         a missing accessor.  But this is ambiguous because there was no
22169         way to tell in abstract indexers/properties if one of them was
22170         specified.
22171
22172         Now there is a way of addressing that.
22173
22174         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
22175         instead of FindMembers.
22176
22177         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
22178         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
22179
22180         * attribute.cs: Treat indexers and properties as the same in terms
22181         of applying attributes
22182
22183         * ecore.cs (FindMostEncompassedType): Use statically initialized
22184         EmptyExpressions()s like we do elsewhere to avoid creating useless
22185         objects (and we take this out of the tight loop).
22186
22187         (GetConversionOperators): Move the code to extract the actual
22188         operators to a separate routine to clean things up.
22189
22190 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
22191
22192         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
22193         events are always registered FieldBuilders.
22194
22195         * class.cs (FieldBase): New class shared by Fields 
22196
22197         * delegate.cs: If we are a toplevel delegate, use our full name.
22198         If we are a nested delegate, then only use our tail name.
22199
22200 2002-05-02  Ravi Pratap  <ravi@ximian.com>
22201
22202         * expression.cs (IsApplicable): Ensure that we add the "&" to
22203         ref/out types before comparing it with the type of the argument.
22204
22205         (IsParamsMethodApplicable): Ditto.
22206
22207         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
22208         silly me ;-)
22209
22210         * delegate.cs : Handle the case when we have more than one applicable
22211         method. Flag an error only when we finish checking all.
22212
22213 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
22214
22215         * expression.cs: Add support for boolean static initializers.
22216
22217 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
22218
22219         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
22220
22221         * parameter.cs (ComputeParameterTypes,
22222         ComputeAndDefineParameterTypes): Better error handling: now we
22223         clear the `types' cache if we fail during any of the type lookups.
22224         We also return the status code correctly to our caller
22225
22226         * delegate.cs: If we fail to define a delegate, abort the extra
22227         steps. 
22228
22229         * expression.cs (Binary.ResolveOperator): for
22230         operator==(object,object) and operator !=(object, object) we also
22231         have to verify that there is an implicit conversion from one to
22232         the other.
22233
22234         (ArrayAccess.DoResolve): Array Access can operate on
22235         non-variables. 
22236
22237 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
22238
22239         * assign.cs (CompoundAssign): A new class used as a "flag" that
22240         the assignment actually is happening as part of a compound
22241         assignment operator.
22242
22243         During compound assignment, a few new rules exist to enable things
22244         like:
22245
22246         byte b |= 1 + 2
22247
22248         From the spec:
22249
22250         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
22251         to the type of x) if y is implicitly convertible to the type of x,
22252         and the operator is a builtin operator and the return type of the
22253         operator is explicitly convertible to the type of x. 
22254
22255         * rootcontext.cs: Reset warning level to 2.  4 catches various
22256         "interesting" features in mcs, we must clean this up at some
22257         point, but currently am trying to kill other bugs ;-)
22258
22259         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
22260         in container classes as well.  
22261
22262         * expression.cs (Binary.ResolveOperator): Handle string case
22263         before anything else (as operator overloading does emit an error
22264         before doing anything else).
22265
22266         This code could go away when we move to a table driven model, but
22267         i could not come up with a good plan last night.
22268
22269 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
22270
22271         * typemanager.cs (CSharpName): reimplementation using regex.
22272         * class.cs: added null check for fields in Emit
22273         * rootcontext.cs: set warninglevel to 4
22274
22275 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
22276
22277         * typemanager.cs (CSharpName): reimplemented with Lupus
22278         suggestion.
22279
22280 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
22281
22282         * statement.cs (If): correclty implement Resolve, because we were
22283         not catching sem errors in there.  The same process is needed
22284         everywhere else. 
22285         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
22286
22287
22288         (Statement.Warning_DeadCodeFound): Factorize code.
22289         (While): Report dead code here too.
22290
22291         (Statement): Added Resolve virtual method to allow
22292         for resolution split from the emit code.
22293
22294 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
22295
22296         * statement.cs (EmitBoolExpression): No longer try to resolve the
22297         expression here.    
22298         (MakeBoolean): New utility function that resolve, implicitly
22299         converts to boolean and tags the expression. 
22300
22301
22302         (If, Do): Implement dead code elimination.
22303         (While): Implement loop inversion
22304
22305         (Do, While, For, If): Resolve the expression prior to calling our
22306         code generation.
22307
22308 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
22309
22310         * class.cs:
22311           - added method Report28 (warning: program has more than one entry point)
22312           - added method IsEntryPoint, implements paragraph 10.1 of the spec
22313           - modified method Method.Define, the part at the end of the method
22314
22315         * rootcontext.cs: added static public Location EntryPointLocation;
22316           
22317         * ../errors/cs0028.cs : Add test case for the above warning.              
22318
22319         * typemanager.cs:
22320           - modified method CSharpName to allow arrays of primitive type to
22321             be printed nicely (e.g. instead of System.Int32[][] it now prints
22322             int[][])
22323           - added method CSharpSignature: returns the signature of a method
22324             in string format to be used in reporting errors, warnings, etc.
22325
22326         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
22327         with String.Empty.
22328
22329 2002-04-26  Ravi Pratap  <ravi@ximian.com>
22330
22331         * delegate.cs (Define): Fix extremely silly bug where I was
22332         setting the type of the 'object' parameter of the BeginInvoke
22333         method to System.IAsyncResult instead of System.Object ;-)
22334
22335 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
22336
22337         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
22338         here. 
22339
22340         (Constructor.Emit): return if we fail to initialize the
22341         constructor.  Another door closed!  
22342
22343         * expression.cs (New.DoResolve): Improve error message (from -6 to
22344         1501).  Use DeclaredOnly lookup to find the exact constructor.
22345
22346         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
22347         loop.  This is useful.
22348
22349         * cs-parser.jay: Adjust the default parameters so that destructors
22350         have the proper signature.
22351
22352 2002-04-26  Martin Baulig  <martin@gnome.org>
22353
22354         * driver.cs (LoadAssembly): If `assembly' contains any characters
22355         which are only valid in path names and not in assembly names
22356         (currently slash, backslash and point), use Assembly.LoadFrom ()
22357         instead of Assembly.Load () on the `assembly' (before iteration
22358         over the link_paths).
22359
22360 2002-04-26  Martin Baulig  <martin@gnome.org>
22361
22362         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
22363
22364 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
22365
22366         * class.cs (Property): use the new typemanager.MemberLookup
22367
22368         (TypeContainer.MemberLookup): Implement using the
22369         TypeManager.MemberLookup now. 
22370
22371         * typemanager.cs: Make MemberLookup a function of the TypeManager,
22372         and return MemberInfos, so that these can be used without an
22373         EmitContext (what we had before).
22374
22375 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
22376
22377         * expression.cs: Fix the case where the argument to params if the
22378         type of the params.  I omitted handling this before.   Fixed
22379
22380 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
22381
22382         * driver.cs: Call BootCorlib_PopulateCoreType
22383
22384         * class.cs (Property.CheckBase): Check for properties only, not
22385         for all members. 
22386
22387         * interface.cs: Temporary hack: try/catch around the
22388         CustomAttributeBuilder, because I am getting an exception that I
22389         do not understand.
22390
22391         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
22392         types whose definitions are required to be there (attributes are
22393         defined before standard types).
22394
22395         Compute definitions as we boot the various types, as they are used
22396         immediately (value_type class will need object_type, but if we do
22397         not initialize object_type, we will pass a null, which will let
22398         the runtime pick the System.Object from the existing corlib, which
22399         is not what we want).
22400
22401 2002-04-22  Patrik Torstensson <totte@labs2.com>
22402
22403         * cs-tokenizer.cs: fixed a number of trim() issues.
22404
22405 2002-04-22  Ravi Pratap  <ravi@ximian.com>
22406
22407         * expression.cs (Argument.Type): Ensure that we return the correct
22408         type when we have out or ref parameters [in which case we 
22409         append a "&"].
22410
22411 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
22412
22413         * class.cs (Property, Indexer): Allow extern modifier in there. 
22414
22415         * typemanager.cs (InitBaseTypes): Initializes object_type and
22416         value_type, since those will be used early on during the bootstrap
22417         process to compile corlib.
22418
22419         (InitCoreTypes): Move code from here to InitBaseTypes.
22420
22421 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
22422
22423         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
22424         single-dimension arrays as using the ldlen opcode.  
22425
22426         Daniel Lewis discovered this optimization.  
22427
22428         * typemanager.cs: Add signature for System.Array::get_Length
22429
22430 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22431
22432         * statement.cs: report the error when the foreach does not apply to an
22433         array nor a collection.
22434
22435 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
22436
22437         * expression.cs: Add implicit conversions to the operator ~.
22438
22439         * constant.cs (DecimalConstant.Emit): Emit decimal value.
22440
22441         * typemanager.cs: Locate the decimal constructor.
22442
22443 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22444
22445         * attribute.cs: use the new property of TypeOf.
22446         * expression.cs: added 'get' property around typearg.
22447
22448         These changes fix a build breaker reported by NickD. Is this the
22449         correct way to fix?  If not, please, revert my changes and make it
22450         work :-).
22451
22452 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
22453
22454         * attribute.cs: Add support for typeof in attribute invocations.
22455         I am not sure that this is right though.
22456
22457 2002-04-14  Duncan Mak  <duncan@ximian.com>
22458
22459         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
22460         Binary.Operator.Division case.
22461
22462 2002-04-13  Ravi Pratap  <ravi@ximian.com>
22463
22464         * class.cs (DefineType): Ensure that we do a proper check on
22465         attribute types and also register it with the TypeManager.
22466
22467         (TypeContainer.Targets): The default for attribute types is
22468         AttributeTargets.All.
22469
22470         * attribute.cs (ApplyAttributes): Registering the attribute type
22471         is done elsewhere, not when we discover we have a Usage attribute.
22472
22473 2002-04-12  Ravi Pratap  <ravi@ximian.com>
22474
22475         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
22476         and get rid of is_delegate parameter.
22477
22478         * everywhere : update.
22479
22480 2002-04-12  Ravi Pratap  <ravi@ximian.com>
22481
22482         * cs-parser.jay (compilation_unit): Revamp completely to use
22483         some new ideas that I got from Rhys' grammar to solve the problems
22484         with assembly level attributes.
22485
22486         (outer_declaration): New grammar production.
22487
22488         (attribute_sections): Add.
22489
22490         (opt_attributes): Base on attribute_sections
22491
22492         (namespace_declaration): Allow opt_attributes to tackle the case
22493         when we have assembly level attributes - we are clever in this
22494         regard now ;-)
22495
22496         * attribute.cs (ApplyAttributes): Do not worry about assembly 
22497         attributes in the non-global context.
22498
22499         * rootcontext.cs (AddGlobalAttributes): Go back to using this
22500         instead of SetGlobalAttributes.
22501
22502         * class.cs, rootcontext.cs : Ensure we define and generate 
22503         attribute types before anything else.
22504
22505         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
22506         and flag the new error -20 for the case when the attribute type
22507         does not have valid targets specified. csc does not catch this.
22508
22509         * ../errors/errors.txt : update for error # -20
22510
22511 2002-04-11  Ravi Pratap  <ravi@ximian.com>
22512
22513         * support.cs (InternalParameters.ParameterModifier): Do some null
22514         checking and return sane values.
22515
22516         * class.cs (Method.Define): If we are a PInvoke method, ensure
22517         that we are static and extern. Report error # 601
22518
22519         * ../errors/cs0601.cs : Add test case for the above error.
22520
22521 2002-04-07  Ravi Pratap  <ravi@ximian.com>
22522
22523         * rootcontext.cs (attribute_types): We need to keep type of
22524         all attribute types separately and emit code for them first.
22525
22526         (RegisterAttribute) : Implement.
22527
22528         * class.cs (DefineType): Check if the current Type is a custom
22529         attribute type and register it accordingly.
22530
22531         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
22532         adding the first attribute twice and rename to
22533
22534         (SetGlobalAttributes): this.
22535
22536         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
22537         lookups.
22538
22539         * attribute.cs (ApplyAttributes): Take an additional argument telling us
22540         if we are processing global arguments. Hmm, I am unsure of this.
22541
22542 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22543
22544         * expression.cs: added static array of strings to avoid calling
22545         Enum.ToString () for Operator in Binary. Significant recover of
22546         performance.
22547
22548 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
22549
22550         * class.cs (FindMembers): Allow the Builders of the various
22551         members to be null.  If they are skip them.  This only happens
22552         during the PInvoke declaration.
22553
22554 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
22555
22556         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
22557         failure, so we do not keep going afterwards.
22558
22559         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
22560         wanted to pass `false' as the `is_delegate' argument.  If this is
22561         the case, why not use delegate_type == null to mean `is_delegate =
22562         false' and anything else as is_delegate = true.
22563
22564 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
22565
22566         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
22567         code for the section, not the beginning of the tests.
22568
22569 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
22570
22571         * cfold.cs: Handle operator + (Enum x, Underlying x) 
22572
22573         * expression.cs (Binary): same.  Warn about errors where we have
22574         Enum/Enum in operator + as well.
22575
22576 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
22577
22578         * statement.cs:
22579                 - added support for switch(bool)
22580                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
22581                 - add TableSwitchEmit() to handle table-based switch statements
22582
22583 2002-04-05  Ravi Pratap  <ravi@ximian.com>
22584
22585         * expression.cs (Invocation.OverloadResolve): Factor out code which
22586         does parameter compatibility checking with arguments so that we can 
22587         re-use the code even from Delegate.VerifyApplicability
22588
22589         (VerifyArgumentsCompat): Move above code here.
22590
22591         * delegate.cs (VerifyApplicability): Get rid of duplicate code
22592         and instead make a call to the above method.
22593
22594 2002-03-31  Ravi Pratap  <ravi@ximian.com>
22595
22596         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
22597         We use it to keep track of classes which are attribute types.
22598
22599 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
22600
22601         * delegate.cs (Delegate.Define): Correctly define the types in the
22602         presence of fixed and array parameters.
22603
22604         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
22605         doing FindMembers.
22606
22607         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
22608         include NonPublic after the first iteration.
22609
22610         * class.cs (Indexer.CheckBase): Only check if both parents are
22611         non-null. 
22612
22613         * cs-parser.jay (accessor_body): If empty, set to null.
22614
22615         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
22616         same code path here to resolve constants names that we did have in
22617         MemberAccess.DoResolve.  There is too much code duplicated here.
22618
22619 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
22620
22621         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
22622
22623         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
22624         to MakeUnionSet.
22625
22626         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
22627         tokens, numbers and strings.
22628
22629         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
22630         parenthesis.
22631
22632         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
22633         asyncronous parameters and the regular parameters.  
22634
22635         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
22636         specify the target directory.
22637
22638         * expression.cs: (This.DoResolve): Simplify
22639         (As.Emit): Optimize, do not generate IsInst if the expression is
22640         always of the given type.
22641
22642         (Is.DoResolve): Bug fix, we were reporting both always/never for
22643         the is expression.
22644
22645         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
22646         creating too many unnecessary arrays.
22647
22648 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
22649
22650         * class.cs (EmitFieldInitializer): Use Assign expression to assign
22651         fields instead of rolling our own initializer.   Takes care of all
22652         implicit conversions, and drops unnecessary static checks/argument.
22653
22654 2002-03-31  Dick Porter  <dick@ximian.com>
22655
22656         * driver.cs: use the GetDirectories() return values properly, and
22657         use "/" as path separator.
22658
22659 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
22660
22661         * expression.cs (Unary): Optimize - - expr into expr.
22662         (Binary): Optimize a + (-b) into a -b.
22663
22664         * codegen.cs (CodeGen): Made all methods static.
22665
22666 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
22667
22668         * rootcontext.cs: 
22669
22670         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
22671         TypeBuilder property.
22672
22673         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
22674         instead. 
22675
22676         * tree.cs: Removed the various RecordXXXX, and replaced with a
22677         single RecordDecl.  Removed all the accessor methods, and just
22678         left a single access point Type 
22679
22680         * enum.cs: Rename DefineEnum to DefineType.
22681
22682         * decl.cs: New abstract method `DefineType' used to unify the
22683         Defines for Enumerations, Interfaces, TypeContainers and
22684         Delegates.
22685
22686         (FindType): Moved LookupInterfaceOrClass here.  Moved the
22687         LookupBaseClasses method that used to live in class.cs and
22688         interface.cs here, and renamed to FindType.
22689
22690         * delegate.cs: Implement DefineType.  Take advantage of the
22691         refactored pattern for locating the parent builder without taking
22692         the parent_builder argument (which we know does not work if we are
22693         nested, and triggering a toplevel definition).
22694
22695 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
22696
22697         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
22698         accessibility of a member has changed during override and report
22699         an error if so.
22700
22701         * class.cs (Method.Define, Property.Define): Only complain on
22702         overrides if the method is private, any other accessibility is
22703         fine (and since we just checked the permission is the same, we are
22704         good to go).
22705
22706         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
22707         and elif are processed always.  The other pre-processing
22708         directives are only processed if we are "taking" the path
22709
22710 2002-03-29  Martin Baulig  <martin@gnome.org>
22711
22712         * class.cs (Method.Emit): Only emit symbolic debugging info if the
22713         current location is not Null.
22714
22715         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
22716         a separate method so we can profile it.
22717
22718         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
22719         `span.Seconds' are just seconds, but no minutes or hours.
22720         (MainDriver): Profile the CodeGen.SaveSymbols calls.
22721
22722 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
22723
22724         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
22725         Remove the gratuitous set of Final:
22726
22727                                 // If an interface implementation, then we can set Final.
22728                                 if (((flags & MethodAttributes.Abstract) == 0) &&
22729                                     implementing.DeclaringType.IsInterface)
22730                                         flags |= MethodAttributes.Final;
22731
22732         I do not know what I was smoking when I used that.
22733
22734
22735         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
22736         step into fixing the name resolution issues for delegates and
22737         unifying the toplevel name resolution.
22738
22739 2002-03-28  Martin Baulig  <martin@gnome.org>
22740
22741         * class.cs (Method.Emit): If we have a symbol writer, call its
22742         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
22743         tell it about the current method.
22744
22745         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
22746         writer that we're going to emit the first byte of IL code for a new
22747         statement (a new source line).
22748         (EmitContext.EmitTopBlock): If we have a symbol writer, call
22749         EmitContext.Mark() before emitting any code.
22750
22751         * location.cs (SymbolDocument): Return null when we're Null.
22752
22753         * statement.cs (Statement): Moved the `Location loc' variable here.
22754         (Statement.EmitBoolExpression): If we have a symbol writer, call
22755         ec.Mark() before emitting any code to tell it that we're at the
22756         beginning of a new statement.
22757         (StatementExpression): Added `Location' argument to the constructor.
22758         (Block): Added public readonly variable `StartLocation' and public
22759         variable `EndLocation'.  The latter is to be set using SetEndLocation().
22760         (Block): Added constructor which takes a start and end location.
22761         (Block.SetEndLocation): New method. This sets the end location.
22762         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
22763         local variables we create.
22764         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
22765         each statement and do also mark the begin and end of the block.
22766
22767         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
22768         tell it the current lexer.Location, use Location.Null for the end of the
22769         block.
22770         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
22771         current block, set its end location using SetEndLocation().
22772         (statement_expression): StatementExpression constructor now takes the
22773         lexer.Location as additional argument.
22774         (for_statement, declare_local_variables): Likewise.
22775         (declare_local_variables): When creating a new implicit block, use the
22776         new Block constructor and pass it the lexer.Location.
22777
22778 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
22779
22780         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
22781         members also on the parent interfaces recursively.
22782
22783 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
22784
22785         * report.cs: Use new formats, since Gonzalo finished the missing
22786         bits. 
22787
22788         * expression.cs (Binary.ResolveOperator): added missing operator|
22789         operator& and operator^ for bool/bool.
22790
22791         * cs-parser.jay: CheckDef now takes a Location argument that is
22792         used to report errors more precisly (instead of reporting the end
22793         of a definition, we try to track something which is a lot closer
22794         to the source of the problem).
22795
22796         * cs-tokenizer.cs: Track global token use, so we can properly flag
22797         the use of #define/#undef after the first token has been seen.
22798
22799         Also, rename the reportXXXX to Error_DescriptiveName
22800
22801         * decl.cs (DeclSpace.IsTopLevel): Move property here from
22802         TypeContainer, so that Enum and Interface can use this too.
22803
22804         * class.cs (TypeContainer.LookupInterfaceOrClass,
22805         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
22806         `builder' argument.  Typically this was used to pass the parent
22807         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
22808         the definition).  
22809
22810         The problem is that a nested class could trigger the definition of
22811         a toplevel class, and the builder would be obviously wrong in that
22812         case. 
22813
22814         So we drop this argument, and we compute dynamically the
22815         TypeBuilder/ModuleBuilder (the correct information was available
22816         to us anyways from DeclSpace.Parent)
22817
22818         * interface.cs (Interface.DefineInterface): Drop builder
22819         parameter cleanup like class.cs
22820
22821         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
22822         like class.cs
22823
22824         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
22825         values. 
22826
22827         (Try.Emit): Propagate the returns value from the statement.
22828
22829         (Return.Emit): Even if we are leavning 
22830
22831         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
22832
22833         * modifiers.cs: Fix the computation of MethodAttributes flags.
22834
22835 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
22836
22837         * driver.cs: allow compilation of files that start with '/'.
22838         Add a default case when checking the argument of --target.
22839
22840 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
22841
22842         * interface.cs: Implement the same search algorithm for types in
22843         the interface code.
22844
22845         * delegate.cs: Do not allow multiple definition.
22846
22847         * Recovered ChangeLog that got accidentally amputated
22848
22849         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
22850
22851         * rootcontext.cs: Load manually enum to allow core classes to
22852         contain enumerations.
22853
22854         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
22855         Update to new static methods in TypeManager.
22856
22857         * typemanager.cs (GetMethod, GetConstructor): Use our
22858         implementation of FindMembers to find the members, since during
22859         corlib compilation, the types are TypeBuilders and GetMethod and
22860         GetConstructor do not work.
22861
22862         Make all methods in TypeManager static.
22863
22864         (InitCodeHelpers): Split the functionality from
22865         the InitCodeTypes function.
22866
22867         * driver.cs: Call InitCodeHelpers after we have populated the
22868         types. 
22869
22870         * cs-parser.jay (delegate_declaration): we did not used to compute
22871         the delegate name correctly for void delegates.
22872
22873 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
22874
22875         * rootcontext.cs (RootContext): Init the interface_resolve_order
22876         and type_container_resolve_order always.
22877
22878         (ResolveCore, BootstrapCorlib_ResolveClass,
22879         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
22880         compiler when compiling with --nostdlib
22881
22882         * class.cs (TypeContainer.DefineType): Check that our parent is
22883         not null.  This test is most important when we are bootstraping
22884         the core types.
22885
22886         * codegen.cs: Split out the symbol writing code.
22887
22888 2002-03-25  Martin Baulig  <martin@gnome.org>
22889
22890         * driver.cs (-g): Made -g an alias for --debug.
22891
22892 2002-03-24  Martin Baulig  <martin@gnome.org>
22893
22894         * codegen.cs (SymbolWriter): New public variable. Returns the
22895         current symbol writer.
22896         (CodeGen): Added `bool want_debugging_support' argument to the
22897          constructor. If true, tell the ModuleBuild that we want debugging
22898         support and ask it for the ISymbolWriter.
22899         (Save): If we have a symbol writer, call it's Close() method after
22900         saving the assembly.
22901
22902         * driver.c (--debug): New command line argument to create a
22903         debugger information file.
22904
22905         * location.cs (SymbolDocument): New public property. Returns an
22906         ISymbolDocumentWriter object for the current source file or null
22907         if we don't have a symbol writer.
22908
22909 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
22910
22911         * driver.cs (LoadAssembly): Correctly return when all the paths
22912         have been tried and not before.
22913
22914         * statement.cs (Switch.Emit): return the actual coverage for this
22915         statement (returns/not-returns)
22916
22917         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
22918         switch of the statement if we are the last switch section.  That
22919         kills two problems: try/catch problems (we used to emit an empty
22920         nop at the end) and switch statements where all branches would
22921         return. 
22922
22923 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
22924
22925         * driver.cs: Add default assemblies (the equivalent to the
22926         Microsoft CSC.RSP file)
22927
22928         * cs-tokenizer.cs: When updating `cols and setting it to zero,
22929         also update tokens_seen and set it to false.
22930
22931         * driver.cs: Implement --recurse for Mike.
22932
22933         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
22934         correctly splitting out the paths.
22935
22936 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
22937
22938         * interface.cs (Interface.PopulateProperty): Instead of using
22939         `parent' as the declaration space for the set parameters, use
22940         `this' 
22941
22942         * support.cs (InternalParameters): InternalParameters constructor
22943         takes a DeclSpace instead of a TypeContainer.
22944
22945         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
22946         types are being initialized, load the address of it before calling
22947         the function.  
22948
22949         (New): Provide a mechanism to disable the generation of local
22950         value type temporaries when the caller will be providing us with
22951         an address to store it.
22952
22953         (ArrayCreation.EmitDynamicInitializers): Use it.
22954
22955 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
22956
22957         * expression.cs (Invocation.EmitArguments): Only probe for array
22958         property if there is more than one argument.  Sorry about that.
22959
22960         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
22961         empty param arrays.
22962
22963         * class.cs (Method.LabelParameters): Fix incorrect code path that
22964         prevented the `ParamArrayAttribute' from being applied to the
22965         params attribute.
22966
22967 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
22968
22969         * support.cs (ReflectionParameters): Correctly compute whether the
22970         last argument is a params array.  Fixes the problem with
22971         string.Split ('a')
22972
22973         * typemanager.cs: Make the assemblies array always be non-null
22974         (empty, but non-null)
22975
22976         * tree.cs (RecordDecl): New function that abstracts the recording
22977         of names.  This reports error 101, and provides a pointer to the
22978         previous declaration.  Fixes a crash in the compiler.
22979
22980         * cs-parser.jay (constructor_declaration): Update to new grammar,
22981         and provide a constructor_body that can be empty.
22982
22983 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
22984
22985         * driver.cs: Add support for --resources.
22986
22987         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
22988         Make all types for the various array helper methods be integer.
22989
22990         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
22991         CheckState to ConvCast.
22992
22993         (ConvCast): Now it takes a `checked' state argument, to avoid
22994         depending on the emit context for the conversion, and just using
22995         the resolve time setting.
22996
22997         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
22998         instead of Invocation.EmitArguments.  We do not emit the original
22999         arguments, instead we emit those which have been converted to
23000         unsigned int expressions.
23001
23002         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
23003
23004         * codegen.cs: ditto.
23005
23006         * expression.cs (LocalVariableReference): Drop the use of the
23007         Store function that depended on the variable index.
23008
23009         * statement.cs (VariableInfo): Drop the `Idx' property from this
23010         class, as this is not taking into account the indexes for
23011         temporaries tat we generate during the execution, getting the
23012         indexes wrong.
23013
23014         * class.cs: First emit class initializers, then call the parent
23015         constructor. 
23016
23017         * expression.cs (Binary): Fix opcode emision.
23018         (UnaryMutator.EmitCode): Support checked code generation
23019
23020         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
23021         matches for events for both the Static and Instance scans,
23022         pointing to the same element.   Fix that.
23023
23024 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
23025
23026         * rootcontext.cs (ResolveTree): Always set the
23027         interface_resolve_order, because nested interfaces will be calling
23028         into us.
23029
23030         * class.cs (GetInterfaceOrClass): Track the same resolution
23031         process used by TypeManager.LookupType.  This fixes the nested
23032         type lookups in class declarations (separate path from
23033         LookupType). 
23034
23035         (TypeContainer.DefineType): Also define nested interfaces.
23036         (TypeContainer.RegisterOrder): New public function used to
23037         register the order in which child interfaces need to be closed.
23038
23039         Nested interfaces need to be closed after their parents have been
23040         created. 
23041
23042         * interface.cs (InterfaceAttr): Put all the logic for computing
23043         the interface attribute here. 
23044
23045         (DefineInterface): Register our interface order with the
23046         RootContext or with the TypeContainer depending on the case.
23047
23048 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
23049
23050         * cs-parser.jay: rework foreach statement to work with the new
23051         changes to the policy on SimpleNames.
23052
23053         * report.cs: support Stacktrace on warnings as well.
23054
23055         * makefile: drop --unsafe and /unsafe from the compile.
23056
23057 2002-03-13  Ravi Pratap  <ravi@ximian.com>
23058
23059         * ecore.cs (StandardConversionExists): Modify to take an Expression
23060         as the first parameter. Ensure we do null -> reference type conversion
23061         checking.
23062
23063         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
23064         temporary Expression objects.
23065
23066 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
23067
23068         * interface.cs: workaround bug in method overloading resolution
23069         (there is already a bugzilla bug for it).
23070
23071 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
23072
23073         We could also solve this problem by having a separate path for
23074         performing type lookups, instead of DoResolve, we could have a
23075         ResolveType entry point, and only participating pieces of the
23076         production (simplename, deref, array) would implement this. 
23077
23078         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
23079         signal SimpleName to only resolve type names and not attempt to
23080         resolve anything else.
23081
23082         * expression.cs (Cast): Set the flag.
23083
23084         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
23085
23086         * class.cs: Only report 108 if there is no `new' modifier.
23087
23088         * cs-parser.jay: rework foreach statement to work with the new
23089         changes to the policy on SimpleNames.
23090
23091         * report.cs: support Stacktrace on warnings as well.
23092
23093         * makefile: drop --unsafe and /unsafe from the compile.
23094
23095 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
23096
23097         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
23098         lookups here, instead of doing that at parse time.  This means
23099         that our grammar will not introduce `LocalVariableReferences' as
23100         expressions at this point.  That solves the problem of code like
23101         this:
23102
23103         class X {
23104            static void Main ()
23105            { int X = 1;
23106             { X x = null }}}
23107
23108         This is only half the fix.  The full fix requires parameters to
23109         also be handled in this way.
23110
23111         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
23112         makes the use more obvious of the DeclSpace.  The
23113         ec.TypeContainer.TypeBuilder is now only used to pull the
23114         TypeBuilder for it.
23115
23116         My theory is that I can get rid of the TypeBuilder completely from
23117         the EmitContext, and have typecasts where it is used (from
23118         DeclSpace to where it matters).  
23119
23120         The only pending problem is that the code that implements Aliases
23121         is on TypeContainer, and probably should go in DeclSpace.
23122
23123         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
23124         lookups here, instead of doing that at parse time.  This means
23125         that our grammar will not introduce `LocalVariableReferences' as
23126         expressions at this point.  That solves the problem of code like
23127         this:
23128
23129         class X {
23130            static void Main ()
23131            { int X = 1;
23132             { X x = null }}}
23133
23134         This is only half the fix.  The full fix requires parameters to
23135         also be handled in this way.
23136
23137         * class.cs (Property.DefineMethod): When implementing an interface
23138         method, set newslot, when implementing an abstract method, do not
23139         set the flag (before we tried never setting it, or always setting
23140         it, which is the difference).
23141         (Indexer.DefineMethod): same.
23142         (Method.DefineMethod): same.
23143
23144         * ecore.cs: Only set the status used flag if we get back a Field.
23145
23146         * attribute.cs: Temporary hack, so Paolo can keep working.
23147
23148 2002-03-08  Ravi Pratap  <ravi@ximian.com>
23149
23150         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
23151         the unmanaged type in the case we have a MarshalAs attribute.
23152
23153         (Resolve): Handle the case when we are parsing the special MarshalAs
23154         attribute [we need to store the unmanaged type to use later]
23155
23156         * typemanager.cs (marshal_as_attr_type): Built in type for the 
23157         MarshalAs Attribute.
23158
23159         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
23160         on parameters and accordingly set the marshalling info.
23161
23162 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
23163
23164         * class.cs: Optimizing slightly by removing redundant code after
23165         we switched to the `NoTypes' return value.
23166         (Property.DefineMethod): use NoTypes here too.
23167
23168         This fixes the bug I introduced in my last batch of changes.
23169
23170 2002-03-05  Ravi Pratap  <ravi@ximian.com>
23171
23172         * tree.cs (RecordEnum): Add. We now keep track of enums too.
23173
23174         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
23175         Enums since those are types too. 
23176
23177         * cs-parser.jay (enum_declaration): Record enums as we parse them.
23178
23179         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
23180         thanks to a call during the lookup process.
23181
23182 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
23183
23184         * statement.cs (Foreach): Lots of work to accomodate a particular
23185         kind of foreach statement that I had not kept in mind.  It is
23186         possible to have foreachs on classes that provide a GetEnumerator
23187         method that return objects that implement the "pattern" for using
23188         a foreach, there is no need to support GetEnumerator
23189         specifically. 
23190
23191         This is needed to compile nant.
23192
23193         * decl.cs: Only report 114 if the member is not `Finalize' and if
23194         the warning level is at least 2.
23195
23196         * class.cs: Moved the compare function from Method to
23197         MethodSignature. 
23198
23199         (MethodSignature.InheritableMemberSignatureCompare): Add new
23200         filter function that is used to extract inheritable methods from a
23201         class. 
23202
23203         (Method.Define): Use the new `inheritable_method_signature_filter'
23204         delegate
23205
23206         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
23207         command. 
23208
23209 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
23210
23211         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
23212
23213         * cs-parser.jay: Add opt_semicolon to the interface declaration.
23214
23215         * expression.cs: Pass location information to
23216         ConvertImplicitStandard. 
23217
23218         * class.cs: Added debugging code to track return values from
23219         interfaces. 
23220
23221 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
23222
23223         * expression.cs (Is.DoResolve): If either side of the `is' is an
23224         interface, do not flag the warning.
23225
23226         * ecore.cs (ImplicitReferenceConversion): We need a separate test
23227         for interfaces
23228
23229         * report.cs: Allow for --fatal to be used with --probe.
23230
23231         * typemanager.cs (NoTypes): Move the definition for the empty Type
23232         array here. 
23233
23234         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
23235         properties. 
23236         (TypeContainer.DefineProxy): New function used to proxy to parent
23237         implementations when implementing interfaces.
23238         (TypeContainer.ParentImplements): used to lookup if our parent
23239         implements a public function that is required by an interface.
23240         (TypeContainer.VerifyPendingMethods): Hook this up.
23241
23242         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
23243         `modules' and `assemblies' arraylists into arrays.  We only grow
23244         these are the very early start up of the program, so this improves
23245         the speedof LookupType (nicely measured).
23246
23247         * expression.cs (MakeByteBlob): Replaced unsafe code with
23248         BitConverter, as suggested by Paolo.
23249
23250         * cfold.cs (ConstantFold.Binary): Special case: perform constant
23251         folding of string concatenation, but if either side is a string,
23252         and the other is not, then return null, and let the runtime use
23253         the concatenation on the string plus the object (using
23254         `Object.ToString'). 
23255
23256 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
23257
23258         Constant Folding has been implemented now.
23259
23260         * expression.cs (Unary.Reduce): Do not throw an exception, catch
23261         the error instead on types that are not supported in one's
23262         complement. 
23263
23264         * constant.cs (Constant and all children): New set of functions to
23265         perform implict and explicit conversions.
23266
23267         * ecore.cs (EnumConstant): Implement the new functions to perform
23268         conversion by proxying to the child expression.
23269
23270         * codegen.cs: (ConstantCheckState): Constant evaluation has its
23271         own separate setting that can not be turned off from the command
23272         line using --unchecked or --checked and is only controlled using
23273         the checked/unchecked statements and expressions.  This setting is
23274         used by the constant folder to flag errors.
23275
23276         * expression.cs (CheckedExpr, UncheckedExpr): Set the
23277         ConstantCheckState as well.   
23278
23279         During Resolve, they also have to flag the state, because the
23280         constant folder runs completely in the Resolve phase.
23281
23282         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
23283         well.
23284
23285 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
23286
23287         * cfold.cs: New file, this file contains the constant folder.
23288
23289         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
23290         argument to track whether we are using the resulting address to
23291         load or store a value and provide better error messages. 
23292
23293         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
23294         new AddressOf arguments.
23295
23296         * statement.cs (Foreach.EmitCollectionForeach): Update
23297
23298         * expression.cs (Argument.Emit): Call AddressOf with proper
23299         arguments to track usage.
23300
23301         (New.DoEmit): Call AddressOf with new arguments.
23302
23303         (Unary.Emit): Adjust AddressOf call.
23304
23305 2002-03-01  Ravi Pratap  <ravi@ximian.com>
23306
23307         * cs-parser.jay (member_access): Change the case for pre-defined types
23308         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
23309         this suggestion.
23310
23311         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
23312         a method body.
23313
23314         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
23315         essentially like methods and apply attributes like MethodImplOptions to them too.
23316
23317         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
23318         not being null.
23319
23320         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
23321         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
23322         is the DeclSpace.
23323
23324         * Update code everywhere accordingly.
23325
23326         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
23327
23328         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
23329
23330 2002-02-28  Ravi Pratap  <ravi@ximian.com>
23331
23332         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
23333         try performing lookups against those instead of jumping straight into using
23334         the 'using' clauses.
23335
23336         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
23337
23338         (LookupType): Perform lookups in implicit parents too.
23339
23340         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
23341         sequence as RootContext.LookupType. 
23342
23343         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
23344         the various cases of namespace lookups into this method.
23345
23346 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
23347
23348         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
23349         in positional arguments)
23350
23351         * class.cs (Operator): Update the AllowedModifiers to contain
23352         extern. 
23353
23354         * cs-parser.jay: Update operator declaration to allow for the
23355         operator body to be empty.
23356
23357         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
23358         values. 
23359
23360 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
23361
23362         * class.cs (Method.Emit): Label parameters.
23363
23364         * driver.cs: Return 1 or 0 as the program exit code.
23365
23366 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
23367
23368         * expression.cs: Special case the `null' object when trying to
23369         auto-compute the type, as anything can be explicitly converted to
23370         that. 
23371
23372         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
23373         spotting this Paolo.
23374
23375         (Expression.ImplicitNumericConversion): Perform comparissions of
23376         the type using the underlying type in the case of an enumeration
23377         rather than using the enumeration type for the compare.
23378
23379         Cope with the underlying == type case, which is not possible to
23380         catch before. 
23381
23382         (Expression.ConvertNumericExplicit): Perform comparissions of
23383         the type using the underlying type in the case of an enumeration
23384         rather than using the enumeration type for the compare.
23385
23386         * driver.cs: If the user does not supply an extension, assume .exe
23387
23388         * cs-parser.jay (if_statement): Rewrote so that we can track the
23389         location for the if statement.
23390
23391         * expression.cs (Binary.ConstantFold): Only concat strings when
23392         the operation is "+", not everything ;-)
23393
23394         * statement.cs (Statement.EmitBoolExpression): Take a location
23395         argument. 
23396         (If, While, Do): Track location.
23397
23398         * expression.cs (Binary.ResolveOperator): In the object + string
23399         case, I was missing a call to ConvertImplicit
23400
23401 2002-02-25  Ravi Pratap  <ravi@ximian.com>
23402
23403         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
23404         Location arguments. Ensure we use RootContext.LookupType to do our work
23405         and not try to do a direct Type.GetType and ModuleBuilder.GetType
23406
23407         * interface.cs (PopulateMethod): Handle the type of the parameter being
23408         null gracefully.
23409
23410         * expression.cs (Invocation.BetterFunction): Handle the case when we 
23411         have a params method with no fixed arguments and a call is made with no
23412         arguments.
23413
23414 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
23415
23416         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
23417         the verbatim-string-literal
23418
23419         * support.cs (InternalParameters.ParameterModifier): handle null
23420         fixed parameters.
23421         (InternalParameters.ParameterType): ditto.
23422
23423         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
23424         duplicating the name of the variable parameter.
23425         (GetParameterByName): Fix bug where we were not looking up array
23426         paramters if they were the only present (thanks Paolo!).
23427         (GetParameterInfo): We only have an empty set of types if both
23428         fixed and array are set to null.
23429         (GetParameterInfo-idx): Handle FixedParameter == null
23430
23431         * cs-parser.jay: Handle the case where there is no catch
23432         statements (missing null test).
23433
23434 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
23435
23436         * driver.cs (MainDriver): Be conservative on our command line
23437         handling.
23438
23439         Catch DirectoryNotFoundException when calling GetFiles.
23440
23441         (SplitPathAndPattern): Used to split the input specification into
23442         a path and a pattern that we can feed to Directory.GetFiles.
23443
23444 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
23445
23446         * statement.cs (Fixed): Implement the last case of the Fixed
23447         statement (string handling).
23448
23449         * expression.cs (StringPtr): New class used to return a char * to
23450         a string;  Used by the Fixed statement.
23451
23452         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
23453
23454         * expression.cs (Binary.ResolveOperator): Remove redundant
23455         MemberLookup pn parent type.
23456         Optimize union call, we do not need a union if the types are the same.
23457         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
23458         type.
23459
23460         Specialize the use of MemberLookup everywhere, instead of using
23461         the default settings. 
23462
23463         (StackAlloc): Implement stackalloc keyword.
23464
23465         * cs-parser.jay: Add rule to parse stackalloc.
23466
23467         * driver.cs: Handle /h, /help, /?
23468
23469         * expression.cs (MakeByteBlob): Removed the hacks we had in place
23470         before we supported unsafe code.
23471
23472         * makefile: add --unsafe to the self compilation of mcs.
23473
23474 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
23475
23476         * expression.cs (PointerArithmetic): New class that is used to
23477         perform pointer arithmetic.
23478         (Binary.Resolve): Handle pointer arithmetic
23479         Handle pointer comparission.
23480         (ArrayPtr): Utility expression class that is used to take the
23481         address of an array.
23482
23483         (ElementAccess): Implement array access for pointers
23484
23485         * statement.cs (Fixed): Implement fixed statement for arrays, we
23486         are missing one more case before we are done.
23487
23488         * expression.cs (Indirection): Implement EmitAssign and set the
23489         ExprClass to Variable.  This allows pointer dereferences to be
23490         treated as variables, and to have values assigned to them.
23491
23492         * ecore.cs (Expression.StoreFromPtr): New utility function to
23493         store values dereferencing.
23494
23495 2002-02-20  Ravi Pratap  <ravi@ximian.com>
23496
23497         * expression.cs (Binary.ResolveOperator): Ensure that we are
23498         not trying to operate on a void type - this fixes the reported
23499         bug.
23500
23501         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
23502         the parent implementation is sealed.
23503
23504         * ../errors/cs0239.cs : Add.
23505
23506         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
23507
23508         * typemanager.cs (unverifiable_code_type): Corresponds to 
23509         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
23510         which have unsafe code in them.
23511
23512         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
23513         unsafe context.
23514
23515 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
23516
23517         * cs-tokenizer.cs: Add support for @"litreal strings"
23518
23519         Make tokenizer accept pre-processor directives
23520         on any column (remove the old C-like limitation). 
23521
23522         * rootcontext.cs (EmitCode): Emit any global attributes.
23523         (AddGlobalAttributes): Used to keep track of assembly attributes. 
23524
23525         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
23526
23527         * cs-parser.jay: Add support for global attributes.  
23528
23529 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
23530
23531         * expression.cs (Indirection): New helper class.  Unary will
23532         create Indirection classes to be able to implement the
23533         IMemoryLocation interface on it.
23534
23535 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
23536
23537         * cs-parser.jay (fixed_statement): reference the right statement.
23538
23539         * statement.cs (Fixed.Emit): Finish implementing the fixed
23540         statement for the &x case.
23541
23542 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
23543
23544         * class.cs (Property.Define, Method.Define): Remove newslot when
23545         `implementing'.  
23546
23547         * modifiers.cs: My use of NewSlot when `Abstract' was set was
23548         wrong.  NewSlot should only be used if the `new' keyword is present.
23549
23550         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
23551         locating our system dir.  Sorry about this.
23552
23553 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
23554
23555         * driver.cs (GetSystemDir): Compute correctly the location of our
23556         system assemblies.  I was using the compiler directory instead of
23557         the library directory.
23558
23559 2002-02-13  Ravi Pratap  <ravi@ximian.com>
23560
23561         * expression.cs (BetterFunction): Put back in what Miguel commented out
23562         since it is the correct fix. The problem is elsewhere ;-)
23563
23564         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
23565         parameters of the parms method are themselves compatible or not !
23566
23567         (StandardConversionExists): Fix very dangerous bug where we were forgetting
23568         to check that a class implements an interface before saying that an implicit
23569         conversion was allowed. Use ImplementsInterface to do the checking.
23570
23571 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
23572
23573         * class.cs (Method.Define): Track whether we are an explicit
23574         implementation or not.  And only call DefineMethodOverride if we
23575         are an explicit implementation.
23576
23577         (Property.DefineMethod): Ditto.
23578
23579 2002-02-11  Ravi Pratap  <ravi@ximian.com>
23580
23581         * expression.cs (BetterFunction): Catch hideous bug which was
23582          preventing us from detecting ambiguous calls due to implicit casts i.e
23583         cs0121.
23584
23585 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
23586
23587         * support.cs (Pair): Remove un-needed method.  I figured why I was
23588         getting the error in cs-parser.jay, the variable in a foreach loop
23589         is readonly, and the compiler does not really treat this as a variable.
23590
23591         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
23592         instead of EQUALS in grammar.  
23593
23594         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
23595
23596         * expression.cs (Unary.DoResolve): Check whether the argument is
23597         managed or not.
23598
23599 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
23600
23601         * support.cs: Api for Pair to set a value.  Despite the fact that
23602         the variables are public the MS C# compiler refuses to compile
23603         code that accesses the field if the variable is part of a foreach
23604         statement. 
23605
23606         * statement.cs (Fixed): Begin implementation of the fixed
23607         statement.
23608
23609         (Block.AddVariable): Return the VariableInfo on success and null
23610         on failure instead of true/false. 
23611
23612         * cs-parser.jay (foreach): Catch errors on variables already
23613         defined (we were ignoring this value before) and properly unwind
23614         the block hierarchy
23615
23616         (fixed_statement): grammar for the fixed statement.
23617
23618 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
23619
23620         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
23621         pointer types to be incretemented.
23622
23623         (SizeOf): Implement.
23624
23625         * cs-parser.jay (pointer_member_access): Implement
23626         expr->IDENTIFIER production.
23627
23628         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
23629         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
23630         on safe contexts.
23631
23632         (Unary): Implement indirection.
23633
23634         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
23635         use in non-unsafe context).
23636
23637         (SimpleName.DoResolve): Check for pointers in field access on safe
23638         contexts. 
23639
23640         (Expression.LoadFromPtr): Factor the load-indirect code in this
23641         function.  This was duplicated in UnboxCast and ParameterReference
23642
23643 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
23644
23645         * expression.cs (ComposedCast): report an error if a pointer cast
23646         is used in a safe region.
23647
23648         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
23649         pointer type casts in unsafe context.
23650
23651         * codegen.cs (EmitContext): Set up IsUnsafe.
23652
23653         * cs-parser.jay (non_expression_type): Add productions for pointer
23654         casts. 
23655
23656         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
23657         code.  We should not use force into static mode if the method is
23658         not virtual.  Fixes bug in MIS
23659
23660         * statement.cs (Do.Emit, While.Emit, For.Emit,
23661         Statement.EmitBoolExpression): Add support to Do and While to
23662         propagate infinite loop as `I do return' semantics.
23663
23664         Improve the For case to also test for boolean constants.
23665
23666         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
23667         to the list of attributes we can add.
23668
23669         Remove `EmitContext' argument.
23670
23671         * class.cs (Method.Define): Apply parameter attributes.
23672         (Constructor.Define): Apply parameter attributes.
23673         (MethodCore.LabelParameters): Move here the core of labeling
23674         parameters. 
23675
23676         * support.cs (ReflectionParameters.ParameterModifier,
23677         InternalParameters.ParameterModifier): Use IsByRef on the type and
23678         only return the OUT bit for these parameters instead of in/out/ref
23679         flags.
23680
23681         This is because I miss-understood things.  The ParameterInfo.IsIn
23682         and IsOut represent whether the parameter has the [In] and [Out]
23683         attributes set.  
23684
23685 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
23686
23687         * ecore.cs (FieldExpr.Emit): Release temporaries.
23688
23689         * assign.cs (LocalTemporary.Release): new function.
23690
23691         * codegen.cs (EmitContext.GetTemporaryStorage,
23692         EmitContext.FreeTemporaryStorage): Rework the way we deal with
23693         temporary storage.  Now we can "put back" localbuilders when we
23694         are done with them
23695
23696 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
23697
23698         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
23699         need to make a copy of the variable to generate verifiable code.
23700
23701 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
23702
23703         * driver.cs: Compute dynamically the system directory.
23704
23705         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
23706         Slower, but more generally useful.  Used by the abstract
23707         registering implementation. 
23708
23709         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
23710         the rules for the special rule on Type/instances.  First check if
23711         we have the same name, and if so, try that special static path
23712         rather than the instance path.
23713
23714 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
23715
23716         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
23717         for, while and if.
23718
23719         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
23720         Enum, ValueType, Delegate or Array for non-corlib compiles.
23721
23722         * cs-tokenizer.cs: Catch long identifiers (645)
23723
23724         * typemanager.cs (IndexerPropetyName): Ravi never tested this
23725         piece of code.
23726
23727         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
23728         fix, we were returning too early, so we were not registering
23729         pending methods from abstract classes.
23730
23731         Do not register pending methods if the class is abstract.
23732
23733         * expression.cs (Conditional.DoResolve): Report circular implicit
23734         conversions when we neecd to compute it for conditional
23735         expressions. 
23736
23737         (Is.DoResolve): If the expression is always of the provided type,
23738         flag warning 183.  If the expression can not ever be of the
23739         provided type flag warning 184.
23740
23741         * class.cs: Catch 169 as well.
23742
23743         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
23744         read. 
23745
23746 2002-01-18  Nick Drochak  <ndrochak@gol.com>
23747
23748         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
23749
23750 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
23751
23752         * interface.cs: (PopulateMethod): Check for pointers being defined
23753         only if the unsafe context is active.
23754         (PopulateProperty): ditto.
23755         (PopulateIndexer): ditto.
23756
23757         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
23758         specified.  If pointers are present, make sure that they are
23759         present in an unsafe context.
23760         (Constructor, Constructor.Define): ditto.
23761         (Field, Field.Define): ditto.
23762         (Property, Property.Define): ditto.
23763         (Event, Event.Define): ditto.
23764
23765         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
23766         hashtable if there are classes or structs defined.
23767
23768         * expression.cs (LocalVariableReference.DoResolve): Simplify this
23769         code, as the constant resolution moved.
23770
23771         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
23772         the metadata, so we can flag error 133. 
23773
23774         * decl.cs (MemberCore.UnsafeOK): New function to test that a
23775         pointer is being declared in an unsafe context.
23776
23777 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
23778
23779         * modifiers.cs (Modifiers.Check): Require a Location argument.
23780         Report error 227 for Unsafe use.
23781
23782         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
23783
23784         * statement.cs (For.Emit): If the test is null, then report that
23785         we do `return', as we wont reach anything afterwards.
23786
23787         (Switch.SwitchGoverningType): Track the expression that matched
23788         the conversion.
23789
23790         * driver.cs: Allow negative numbers as an error code to flag.
23791
23792         * cs-parser.jay: Handle 1551.
23793
23794         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
23795
23796 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
23797
23798         * cs-parser.jay: Report 1518 (type declaration can only contain
23799         class, struct, interface, enum or delegate)
23800
23801         (switch_label): Report 1523 (keywords `case' or `default' must
23802         preced code)
23803
23804         (opt_switch_sections): Report 1522 (empty switch)
23805
23806         * driver.cs: Report 1515 (response file specified multiple times)
23807         Report 1516 (Source file specified multiple times).
23808
23809         * expression.cs (Argument.Resolve): Signal 1510
23810
23811         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
23812         access not allowed in static code)
23813
23814 2002-01-11  Ravi Pratap  <ravi@ximian.com>
23815
23816         * typemanager.cs (IsPointerType): Utility method which we are going
23817         to need a lot.
23818
23819         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
23820         the object type, so we take care of that.
23821
23822         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
23823
23824         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
23825         added to non-params parameters :-)
23826
23827         * typemanager.cs (CSharpName): Include 'void' type too. 
23828
23829         (void_ptr_type): Include in the set of core types.
23830
23831         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
23832         duplicating code.
23833
23834         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
23835         an unsafe context.
23836
23837         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
23838         completely forgotten about it.
23839
23840 2002-01-10  Ravi Pratap  <ravi@ximian.com>
23841
23842         * cs-parser.jay (pointer_type): Add. This begins our implementation
23843         of parsing rules for unsafe code.
23844
23845         (unsafe_statement): Implement.
23846
23847         (embedded_statement): Modify to include the above.
23848
23849         * statement.cs (Unsafe): Implement new class for unsafe blocks.
23850
23851         * codegen.cs (EmitContext.InUnsafe): Add. This determines
23852         if the current context is an unsafe one.
23853
23854         * cs-parser.jay (local_variable_pointer_type): Since local variable types
23855         are handled differently, we need separate rules for them.
23856
23857         (local_variable_declaration): Update to use local_variable_pointer_type
23858         to allow variable declarations of unmanaged pointer types.
23859
23860         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
23861         in unsafe contexts.
23862
23863         * ../errors/cs0214.cs : Add.
23864
23865 2002-01-16  Nick Drochak  <ndrochak@gol.com>
23866
23867         * makefile: remove 'response' file when cleaning.
23868
23869 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
23870
23871         * cs-parser.jay: Report 1524.
23872
23873 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
23874
23875         * typemanager.cs (RegisterMethod): drop checking if we have
23876         registered this from here
23877
23878 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
23879
23880         * class.cs (Method.EmitDestructor): Implement calling our base
23881         destructor. 
23882
23883         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
23884         value of InFinally.
23885
23886         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
23887         this routine and will wrap the call in a try/catch block.  Deal
23888         with the case.
23889
23890 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
23891
23892         * ecore.cs (Expression.MemberLookup): instead of taking a
23893         parameter `same_type' that was used to tell whether we could
23894         access private members we compute our containing type from the
23895         EmitContext.
23896
23897         (FieldExpr): Added partial support for volatile fields.  This does
23898         not work for volatile fields exposed from assemblies, as I can not
23899         figure out how to extract the modreq from it.
23900
23901         Updated all the source files to use this.
23902
23903         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
23904         because it is referenced by MemberLookup very often. 
23905
23906 2002-01-09  Ravi Pratap  <ravi@ximian.com>
23907
23908         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
23909         TypeBuilder.GetCustomAttributes to retrieve what we need.
23910
23911         Get rid of redundant default_member_attr_type as this is the same as
23912         default_member_type which already exists.
23913
23914         * interface.cs, attribute.cs : Update accordingly.
23915
23916 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
23917
23918         * typemanager.cs: Enable IndexerPropertyName again.  It does not
23919         work for TYpeBuilders though.  Ravi, can you please fix this?
23920
23921         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
23922
23923         * expression.cs (Argument.Emit): Handle the case of ref objects
23924         being passed to ref functions;  
23925
23926         (ParameterReference.EmitLoad): Loads the content of the pointer
23927         without dereferencing.
23928
23929 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
23930
23931         * cs-tokenizer.cs: Implemented the pre-processing expressions.
23932
23933 2002-01-08  Ravi Pratap  <ravi@ximian.com>
23934
23935         * class.cs (Indexer.DefineMethod): Incorporate the interface
23936         type in the name of the method if we are doing explicit interface
23937         implementation.
23938
23939         * expression.cs (ConversionExists): Remove as it is completely obsolete.
23940
23941         (BetterConversion): Fix extremely trivial bug where we were referring to
23942         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
23943         again !
23944
23945         * ../errors/bug16.cs : Add although we have fixed it.
23946
23947 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
23948
23949         * expression.cs (BaseIndexer): Begin implementation.
23950
23951         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
23952
23953         * cs-parser.jay (indexer_declarator): Use qualified_identifier
23954         production directly to remove a shift/reduce, and implement
23955         explicit interface implementation.
23956
23957         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
23958         after a floating point suffix.
23959
23960         * expression.cs (DoNumericPromotions): Improved the conversion for
23961         uint/uint.  If we have a constant, we avoid doing a typecast to a
23962         larger type.
23963
23964         * class.cs (Indexer): Implement explicit interface implementation
23965         for indexers.
23966
23967 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
23968
23969         * class.cs: make the default instance constructor public and hidebysig.
23970
23971 2001-01-03  Ravi Pratap  <ravi@ximian.com>
23972
23973         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
23974         so we can call it from elsewhere.
23975
23976         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
23977         we emit it internally if the class has a defined indexer; otherwise the user
23978         emits it by decorating the class definition with the DefaultMemberAttribute.
23979
23980         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
23981         attribute is not used on a type which defines an indexer.
23982
23983         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
23984         character when we skip whitespace.
23985
23986         * ../errors/cs0646.cs : Add.
23987
23988 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
23989
23990         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
23991         again. 
23992
23993         * makefile: Add practical target `mcs3.exe' which builds the third
23994         generation compiler. 
23995
23996         * expression.cs (New): Fix structures constructor calling.
23997
23998         * class.cs (Property, Method, Indexer): Emit Final flag on the
23999         method if we are an interface implementation and we are not
24000         abstract. 
24001
24002         * ecore.cs (PropertyExpr): New public field `IsBase', tells
24003         whether this property is referencing a `base' method.
24004
24005         * expression.cs (Invocation.EmitCall): take an extra argument:
24006         is_base, this is used to determine whether the `call' or
24007         `callvirt' opcode should be used.
24008
24009
24010         * delegate.cs: update EmitCall.
24011
24012         * class.cs (Method.Define): Set NewSlot for the cases where we are
24013         not implementing an interface method.
24014
24015         (Property.Define): ditto.
24016
24017 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
24018
24019         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
24020         'r'.  Allows mcs to parse itself fully.
24021
24022 2002-01-02  Ravi Pratap  <ravi@ximian.com>
24023
24024         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
24025         of the number of initializers that require the InitializeArray method.
24026
24027         (CheckIndices): Store the Expression in all cases - not the plain value. Also
24028         update the above field where necessary.
24029
24030         (MakeByteBlob): Update accordingly.
24031
24032         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
24033         greater than 2.
24034
24035         (EmitDynamicInitializers): Update in accordance with the new optimization.
24036
24037         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
24038         same OpCode applies.
24039
24040         * cs-parser.jay : Fix some glaring errors I introduced.
24041
24042 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
24043
24044         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
24045         so that we can check for name clashes there too.
24046
24047         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
24048         for interface indexers.
24049
24050         * interfaces.cs (Define): Emit the default member attribute.
24051
24052         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
24053         variable was being referred to while setting the value ;-)
24054
24055 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
24056
24057         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
24058         byte-by-byte information when we know the data is zero.
24059
24060         Make the block always a multiple of 4, because
24061         DefineInitializedData has a bug.
24062
24063         * assign.cs: Fix, we should assign from the temporary, not from
24064         the source. 
24065
24066         * expression.cs (MakeByteBlob): Fix my incorrect code.
24067
24068 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
24069
24070         * typemanager.cs (EnumToUnderlying): This function is used to get
24071         the underlying type from an enumeration, because it does not
24072         always work. 
24073
24074         * constant.cs: Use the I4_S form for values between -128 and 127.
24075
24076         * statement.cs (Block.LookupLabel): Looks up a label.
24077         (Block): Drop support for labeled blocks.
24078
24079         (LabeledStatement): New kind of statement that represents a label
24080         only.
24081
24082         (Goto): Finally implement this bad boy.
24083
24084         * cs-parser.jay: Update to reflect new mechanism to implement
24085         labels.
24086
24087 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
24088
24089         * codegen.cs (EmitContext.This): a codegen property that keeps the
24090         a single instance of this instead of creating many different this
24091         instances. 
24092
24093         * delegate.cs (Delegate.DoResolve): Update to use the property;
24094
24095         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
24096
24097         * expression.cs (BaseAccess.DoResolve): Ditto.
24098
24099 2001-12-29  Ravi Pratap  <ravi@ximian.com>
24100
24101         * typemanager.cs (methodimpl_attr_type): Add to hold the type
24102         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
24103
24104         (InitCoreTypes): Update accordingly.
24105
24106         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
24107         so we can quickly store the state.
24108
24109         (ApplyAttributes): Set the correct implementation flags
24110         for InternalCall methods.
24111
24112 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
24113
24114         * expression.cs (EmitCall): if a method is not virtual, then do
24115         not use callvirt on it.
24116
24117         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
24118         user defined stuff) requires the use of stobj, which takes an
24119         address on the stack instead of an array and an index.  So emit
24120         the Ldelema operation for it.
24121
24122         (EmitStoreOpcode): Use stobj for valuetypes.
24123
24124         (UnaryMutator.EmitCode): Use the right 1 value depending on
24125         whether we are dealing with int64/uint64, float or doubles.
24126
24127         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
24128         constructors that I implemented last night.
24129
24130         (Constructor.IsDefault): Fix to work properly for static
24131         constructors.
24132
24133         * cs-parser.jay (CheckDef): report method signature errors.
24134         Update error number 103 to be 132.
24135
24136         * decl.cs: New AdditionResult enumeration value: MethodExists.
24137         Although we do this check for methods later on in the semantic
24138         analysis, catching repeated default constructors is so easy that
24139         we catch these here. 
24140
24141         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
24142         promotions code.
24143
24144         (ParameterReference.EmitAssign, Emit): handle
24145         bools as bytes.
24146
24147         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
24148         (ArrayAccess.EmitStoreOpcode): ditto.
24149
24150         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
24151
24152         * expression.cs (MakeByteBlob): Complete all the missing types
24153         (uint, short, ushort, byte, sbyte)
24154
24155         * class.cs: Only init instance field initializers on instance
24156         constructors. 
24157
24158         Rename `constructors' to instance_constructors. 
24159
24160         (TypeContainer.AddConstructor): Only add constructors to the list
24161         if it is not static.
24162
24163         Make sure that we handle default_static_constructor independently
24164         everywhere where we handle instance_constructors
24165
24166 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
24167
24168         * class.cs: Do not lookup or create a base initializer for a
24169         static constructor.
24170
24171         (ConstructorInitializer.Resolve): use the proper type to lookup
24172         for constructors.
24173
24174         * cs-parser.jay: Report error 1585 (modifiers between type and name).
24175
24176         * enum.cs, interface.cs: Remove CloseType, this is taken care by
24177         in DeclSpace. 
24178
24179         * decl.cs: CloseType is now an virtual method, the default
24180         implementation just closes this type.
24181
24182 2001-12-28  Ravi Pratap  <ravi@ximian.com>
24183
24184         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
24185         to PreserveSig by default. Also emit HideBySig on such methods.
24186
24187         Basically, set the defaults to standard values.
24188
24189         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
24190         argument, if candidate is better, it can't be worse than the best !
24191
24192         (Invocation): Re-write bits to differentiate between methods being
24193         applicable in their expanded form and their normal form - for params
24194         methods of course.
24195
24196         Get rid of use_standard everywhere as only standard conversions are allowed
24197         in overload resolution. 
24198
24199         More spec conformance.
24200
24201 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
24202
24203         * driver.cs: Add --timestamp, to see where the compiler spends
24204         most of its time.
24205
24206         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
24207         `this' in static code.
24208
24209         (SimpleName.DoResolve): Implement in terms of a helper function
24210         that allows static-references to be passed upstream to
24211         MemberAccess.
24212
24213         (Expression.ResolveWithSimpleName): Resolve specially simple
24214         names when called by MemberAccess to implement the special
24215         semantics. 
24216
24217         (Expression.ImplicitReferenceConversion): Handle conversions from
24218         Null to reference types before others, as Null's type is
24219         System.Object. 
24220
24221         * expression.cs (Invocation.EmitCall): Handle the special case of
24222         calling methods declared on a reference type from a ValueType
24223         (Base classes System.Object and System.Enum)
24224
24225         (MemberAccess.Resolve): Only perform lookups on Enumerations if
24226         the left hand side is a TypeExpr, not on every enumeration. 
24227
24228         (Binary.Resolve): If types are reference types, then do a cast to
24229         object on operators != and == of both arguments.
24230
24231         * typemanager.cs (FindMembers): Extract instance and static
24232         members if requested.
24233
24234         * interface.cs (PopulateProperty): Use void_type instead of null
24235         as the return type for the setter method.
24236
24237         (PopulateIndexer): ditto.
24238
24239 2001-12-27  Ravi Pratap  <ravi@ximian.com>
24240
24241         * support.cs (ReflectionParameters): Fix minor bug where we
24242         were examining the wrong parameter for the ParamArray attribute.
24243
24244         Cope with requests for the type of the parameter at position
24245         greater than the params parameter's. We now return the element
24246         type of the params array as that makes more sense.
24247
24248         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
24249         accordingly as we no longer have to extract the element type
24250         ourselves.
24251
24252         (Invocation.OverloadResolve): Update.
24253
24254 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
24255
24256         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
24257         against IEnumerator, test whether the return value is a descendant
24258         of the IEnumerator interface.
24259
24260         * class.cs (Indexer.Define): Use an auxiliary method to implement
24261         the other bits of the method definition.  Begin support for
24262         explicit interface implementation.
24263
24264         (Property.DefineMethod): Use TypeManager.void_type instead of null
24265         for an empty return value.
24266
24267 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
24268
24269         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
24270         dealing with a FieldExpr which is composed of a FieldBuilder, in
24271         the code path we did extract the constant, but we should have
24272         obtained the underlying value to be able to cast it (otherwise we
24273         end up in an infinite loop, this is what Ravi was running into).
24274
24275         (ArrayCreation.UpdateIndices): Arrays might be empty.
24276
24277         (MemberAccess.ResolveMemberAccess): Add support for section
24278         14.5.4.1 that deals with the special case of E.I when E is a type
24279         and something else, that I can be a reference to a static member.
24280
24281         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
24282         handle a particular array type to create byte blobs, it is just
24283         something we dont generate byteblobs for.
24284
24285         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
24286         arguments. 
24287
24288         * location.cs (Push): remove the key from the hashtable that we
24289         are about to add.   This happens for empty files.
24290
24291         * driver.cs: Dispose files after we have parsed them.
24292
24293         (tokenize): new function that only runs the tokenizer on its
24294         input, for speed testing.
24295
24296 2001-12-26  Ravi Pratap  <ravi@ximian.com>
24297
24298         * class.cs (Event.Define): Define the private field only if there
24299         are no accessors defined.
24300
24301         * expression.cs (ResolveMemberAccess): If there is no associated
24302         field with the event, that means we have an event defined with its
24303         own accessors and we should flag error cs0070 since transforming
24304         ourselves into a field is not valid in that case.
24305
24306         * ecore.cs (SimpleName.DoResolve): Same as above.
24307
24308         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
24309         and charset to sane values.
24310
24311 2001-12-25  Ravi Pratap  <ravi@ximian.com>
24312
24313         * assign.cs (DoResolve): Perform check on events only if they 
24314         are being accessed outside the declaring type.
24315
24316         * cs-parser.jay (event_declarations): Update rules to correctly
24317         set the type of the implicit parameter etc.
24318
24319         (add_accessor, remove_accessor): Set current local parameters.
24320
24321         * expression.cs (Binary): For delegate addition and subtraction,
24322         cast the return value from the method into the appropriate delegate
24323         type.
24324
24325 2001-12-24  Ravi Pratap  <ravi@ximian.com>
24326
24327         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
24328         of these as the workaround is unnecessary.
24329
24330         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
24331         delegate data - none of that is needed at all.
24332
24333         Re-write bits to extract the instance expression and the delegate method
24334         correctly.
24335
24336         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
24337         on delegates too.
24338
24339         * attribute.cs (ApplyAttributes): New method to take care of common tasks
24340         of attaching attributes instead of duplicating code everywhere.
24341
24342         * everywhere : Update code to do attribute emission using the above method.
24343
24344 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
24345
24346         * expression.cs (IsParamsMethodApplicable): if there are not
24347         parameters, return immediately.
24348
24349         * ecore.cs: The 0 literal can be implicity converted to an enum
24350         type. 
24351
24352         (SimpleName.DoResolve): First lookup the type, then lookup the
24353         members. 
24354
24355         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
24356         want to get its address.  If the InstanceExpression is not
24357         addressable, store the result in a temporary variable, then get
24358         the address of it.
24359
24360         * codegen.cs: Only display 219 errors on warning level or above. 
24361
24362         * expression.cs (ArrayAccess): Make it implement the
24363         IMemoryLocation interface.
24364
24365         (Binary.DoResolve): handle the operator == (object a, object b)
24366         and operator != (object a, object b) without incurring into a
24367         BoxedCast (because 5 != o should never be performed).
24368
24369         Handle binary enumerator operators.
24370
24371         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
24372         value type, otherwise use Ldelem_ref.
24373
24374         Use precomputed names;
24375
24376         (AddressOf): Implement address of
24377
24378         * cs-parser.jay (labeled_statement): Fix recursive block
24379         addition by reworking the production.
24380
24381         * expression.cs (New.DoEmit): New has a special case:
24382                 
24383                  If we are dealing with a ValueType, we have a few
24384                  situations to deal with:
24385                 
24386                     * The target of New is a ValueType variable, that is
24387                       easy, we just pass this as the variable reference
24388                 
24389                     * The target of New is being passed as an argument,
24390                       to a boxing operation or a function that takes a
24391                       ValueType.
24392                 
24393                       In this case, we need to create a temporary variable
24394                       that is the argument of New.
24395
24396
24397 2001-12-23  Ravi Pratap  <ravi@ximian.com>
24398
24399         * rootcontext.cs (LookupType): Check that current_type is not null before
24400         going about looking at nested types.
24401
24402         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
24403         not implement the IAssignMethod interface any more.
24404
24405         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
24406         where we tranform them into FieldExprs if they are being resolved from within
24407         the declaring type.
24408
24409         * ecore.cs (SimpleName.DoResolve): Do the same here.
24410
24411         * assign.cs (DoResolve, Emit): Clean up code considerably. 
24412
24413         * ../errors/bug10.cs : Add.
24414
24415         * ../errors/cs0070.cs : Add.
24416
24417         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
24418
24419         * assign.cs : Get rid of EventIsLocal everywhere.
24420
24421 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
24422
24423         * ecore.cs (ConvertIntLiteral): finished the implementation.
24424
24425         * statement.cs (SwitchLabel): Convert the value we are using as a
24426         key before looking up the table.
24427
24428 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
24429
24430         * codegen.cs (EmitTopBlock): Require a Location argument now.
24431
24432         * cs-parser.jay (constructor_declarator): We need to setup
24433         current_local_parameters before we parse the
24434         opt_constructor_initializer, to allow the variables to be bound
24435         to the constructor arguments.
24436
24437         * rootcontext.cs (LookupType): First lookup nested classes in our
24438         class and our parents before we go looking outside our class.
24439
24440         * expression.cs (ConstantFold): Extract/debox the values at the
24441         beginnning. 
24442
24443         * rootcontext.cs (EmitCode): Resolve the constants first before we
24444         resolve the types.  This is not really needed, but it helps debugging.
24445
24446         * statement.cs: report location.
24447
24448         * cs-parser.jay: pass location to throw statement.
24449
24450         * driver.cs: Small bug fix.
24451
24452         * report.cs: Updated format to be 4-zero filled digits.
24453
24454 2001-12-22  Ravi Pratap  <ravi@ximian.com>
24455
24456         * expression.cs (CheckIndices): Fix minor bug where the wrong
24457         variable was being referred to ;-)
24458
24459         (DoEmit): Do not call EmitStaticInitializers when the 
24460         underlying type is System.Object.
24461
24462 2001-12-21  Ravi Pratap  <ravi@ximian.com>
24463
24464         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
24465         and do the usual workaround for SRE.
24466
24467         * class.cs (MyEventBuilder.EventType): New member to get at the type
24468         of the event, quickly.
24469
24470         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
24471
24472         * assign.cs (Assign.DoResolve): Handle the case when the target
24473         is an EventExpr and perform the necessary checks.
24474
24475         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
24476         interface.
24477
24478         (SimpleName.MemberStaticCheck): Include check for EventExpr.
24479
24480         (EventExpr): Set the type in the constructor itself since we 
24481         are meant to be born fully resolved.
24482
24483         (EventExpr.Define): Revert code I wrote earlier.
24484                 
24485         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
24486         instance expression is null. The instance expression is a This in that case
24487         or a null, depending on whether it is a static method or not.
24488
24489         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
24490         refers to more than one method.
24491
24492         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
24493         and accordingly flag errors.
24494
24495 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
24496
24497         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
24498
24499 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
24500
24501         * location.cs (ToString): Provide useful rutine.
24502
24503 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
24504
24505         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
24506         objects, return the actual integral boxed.
24507
24508         * statement.cs (SwitchLabel): define an ILLabel for each
24509         SwitchLabel. 
24510
24511         (Switch.CheckSwitch): If the value is a Literal, extract
24512         the underlying literal.
24513
24514         Also in the unused hashtable we had, add the SwitchLabel so we can
24515         quickly look this value up.
24516
24517         * constant.cs: Implement a bunch of new constants.  Rewrite
24518         Literal based on this.  Made changes everywhere to adapt to this.
24519
24520         * expression.cs (Expression.MakeByteBlob): Optimize routine by
24521         dereferencing array only once, and also copes with enumrations.
24522
24523         bytes are two bytes wide, not one.
24524
24525         (Cast): Perform constant conversions.
24526
24527         * ecore.cs (TryImplicitIntConversion): Return literals instead of
24528         wrappers to the literals here.
24529
24530         * expression.cs (DoNumericPromotions): long literals can converted
24531         to ulong implicity (this is taken care of elsewhere, but I was
24532         missing this spot).
24533
24534         * ecore.cs (Expression.Literalize): Make the return type Literal,
24535         to improve type checking.
24536
24537         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
24538
24539 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
24540
24541         * literal.cs: Revert code from ravi that checked the bounds.  The
24542         bounds are sane by the definition of the type itself. 
24543
24544         * typemanager.cs: Fix implementation of ImplementsInterface.  We
24545         need to actually look up in our parent hierarchy for interfaces
24546         implemented. 
24547
24548         * const.cs: Use the underlying type for enumerations
24549
24550         * delegate.cs: Compute the basename for the delegate creation,
24551         that should fix the delegate test case, and restore the correct
24552         Type Lookup semantics in rootcontext
24553
24554         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
24555         referencing a nested type with the Reflection API is using the "+"
24556         sign. 
24557
24558         * cs-parser.jay: Do not require EOF token at the end.
24559
24560 2001-12-20  Ravi Pratap  <ravi@ximian.com>
24561
24562         * rootcontext.cs (LookupType): Concatenate type names with
24563         a '.' instead of a '+' The test suite passes again.
24564
24565         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
24566         field of the enumeration.
24567
24568         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
24569         the case when the member is an EventExpr.
24570
24571         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
24572         static has an associated instance expression.
24573
24574         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
24575
24576         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
24577
24578         * class.cs (Event.Define): Register event and perform appropriate checks
24579         for error #111.
24580
24581         We define the Add and Remove methods even if the use provides none because
24582         in that case, we provide default implementations ourselves.
24583
24584         Define a private field of the type of the event. This is done by the CSC compiler
24585         and we should be doing it too ;-)
24586
24587         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
24588         More methods we use in code we generate.
24589
24590         (multicast_delegate_type, delegate_type): Two separate types since the distinction
24591         is important.
24592
24593         (InitCoreTypes): Update accordingly for the above.
24594
24595         * class.cs (Event.Emit): Generate code for default accessors that we provide
24596
24597         (EmitDefaultMethod): Do the job in the above.
24598
24599         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
24600         appropriate place.
24601
24602 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
24603
24604         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
24605         builders even if we were missing one.
24606
24607         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
24608         pass the Basename as our class name instead of the Name.  The
24609         basename will be correctly composed for us.
24610
24611         * parameter.cs (Paramters): Now takes a Location argument.
24612
24613         * decl.cs (DeclSpace.LookupType): Removed convenience function and
24614         make all the code call directly LookupType in RootContext and take
24615         this chance to pass the Location information everywhere.
24616
24617         * Everywhere: pass Location information.
24618
24619 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
24620
24621         * class.cs (Constructor.Define): Updated way of detecting the
24622         length of the parameters.
24623
24624         (TypeContainer.DefineType): Use basename as the type name for
24625         nested types.
24626
24627         (TypeContainer.Define): Do not recursively define types here, as
24628         definition is taken care in order by the RootContext.
24629
24630         * tree.cs: Keep track of namespaces in a per-file basis.
24631
24632         * parameter.cs (Parameter.ComputeSignature): Update to use
24633         DeclSpace. 
24634
24635         (Parameters.GetSignature): ditto.
24636
24637         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
24638         instead of a TypeContainer.
24639
24640         (Interface.SemanticAnalysis): Use `this' instead of our parent to
24641         resolve names.  Because we need to be resolve in our context, not
24642         our parents.
24643
24644         * driver.cs: Implement response files.
24645
24646         * class.cs (TypeContainer.DefineType): If we are defined, do not
24647         redefine ourselves.
24648
24649         (Event.Emit): Emit the code for add/remove handlers.
24650         (Event.Define): Save the MethodBuilders for add/remove.
24651
24652         * typemanager.cs: Use pair here too.
24653
24654         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
24655         DictionaryEntry requires the first argument to be non-null.  
24656
24657         (enum_declaration): Compute full name for registering the
24658         enumeration.
24659
24660         (delegate_declaration): Instead of using
24661         formal_parameter_list, use opt_formal_parameter_list as the list
24662         can be empty.
24663
24664         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
24665         (EventParsing): New property that controls whether `add' and
24666         `remove' are returned as tokens or identifiers (for events);
24667
24668 2001-12-19  Ravi Pratap  <ravi@ximian.com>
24669
24670         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
24671         use MyEventBuilder only and let it wrap the real builder for us.
24672
24673         (MyEventBuilder): Revamp constructor etc.
24674
24675         Implement all operations that we perform on EventBuilder in precisely the same
24676         way here too.
24677
24678         (FindMembers): Update to use the EventBuilder member.
24679
24680         (Event.Emit): Update accordingly.
24681
24682 2001-12-18  Ravi Pratap  <ravi@ximian.com>
24683
24684         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
24685         by calling the appropriate methods.
24686
24687         (GetCustomAttributes): Make stubs as they cannot possibly do anything
24688         useful.
24689
24690         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
24691
24692 2001-12-17  Ravi Pratap  <ravi@ximian.com>
24693
24694         * delegate.cs (Delegate.Populate): Check that the return type
24695         and various parameters types are indeed accessible.
24696
24697         * class.cs (Constructor.Define): Same here.
24698
24699         (Field.Define): Ditto.
24700
24701         (Event.Define): Ditto.
24702
24703         (Operator.Define): Check that the underlying Method defined itself
24704         correctly - so it's MethodBuilder should not be null.
24705
24706         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
24707         expression happens to be null.
24708
24709         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
24710         members but as of now we don't seem to be able to do anything really useful with it.
24711
24712         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
24713         not the EventBuilder.
24714
24715 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
24716
24717         * cs-tokenizer.cs: Add support for defines.
24718         Add support for #if, #elif, #else, #endif
24719
24720         (eval_var): evaluates a variable.
24721         (eval): stubbed for evaluating functions.
24722
24723         * cs-parser.jay: Pass the defines information
24724
24725         * driver.cs: Add --define command line option.
24726
24727         * decl.cs: Move MemberCore here.
24728
24729         Make it the base class for DeclSpace.  This allows us to catch and
24730         report 108 and 109 for everything now.
24731
24732         * class.cs (TypeContainer.Define): Extract all the members
24733         before populating and emit the warning 108 (new keyword required
24734         to override) instead of having each member implement this.
24735
24736         (MemberCore.Define): New abstract method, we will be using this in
24737         the warning reporting engine in Populate.
24738
24739         (Operator.Define): Adjust to new MemberCore protocol. 
24740
24741         * const.cs (Const): This does not derive from Expression, it is a
24742         temporary object we use to create fields, it is a MemberCore. 
24743
24744         * class.cs (Method.Define): Allow the entry point to be in a
24745         specific class.
24746
24747         * driver.cs: Rewrite the argument handler to clean it up a bit.
24748
24749         * rootcontext.cs: Made it just an auxiliary namespace feature by
24750         making everything static.
24751
24752         * driver.cs: Adapt code to use RootContext type name instead of
24753         instance variable.
24754
24755         * delegate.cs: Remove RootContext argument.
24756
24757         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
24758         argument. 
24759
24760         * class.cs (Event.Define): The lookup can fail.
24761
24762         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
24763
24764         * expression.cs: Resolve the this instance before invoking the code.
24765
24766 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
24767
24768         * cs-parser.jay: Add a production in element_access that allows
24769         the thing to become a "type" reference.  This way we can parse
24770         things like "(string [])" as a type.
24771
24772         Note that this still does not handle the more complex rules of
24773         casts. 
24774
24775
24776         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
24777
24778         * ecore.cs: (CopyNewMethods): new utility function used to
24779         assemble the list of methods from running FindMembers.
24780
24781         (MemberLookup): Rework FindMembers so that 
24782
24783 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
24784
24785         * class.cs (TypeContainer): Remove Delegates who fail to be
24786         defined.
24787
24788         * delegate.cs (Populate): Verify that we dont get null return
24789         values.   TODO: Check for AsAccessible.
24790
24791         * cs-parser.jay: Use basename to emit error 574 (destructor should
24792         have the same name as container class), not the full name.
24793
24794         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
24795         possible representation.  
24796
24797         Also implements integer type suffixes U and L.
24798
24799 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
24800
24801         * expression.cs (ArrayCreation.DoResolve): We need to do the
24802         argument resolution *always*.
24803
24804         * decl.cs: Make this hold the namespace.  Hold the root context as
24805         well.
24806         (LookupType): Move here.
24807
24808         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
24809
24810         * location.cs (Row, Name): Fixed the code, it was always returning
24811         references to the first file.
24812
24813         * interface.cs: Register properties defined through interfaces.
24814
24815         * driver.cs: Add support for globbing on the command line
24816
24817         * class.cs (Field): Make it derive from MemberCore as well.
24818         (Event): ditto.
24819
24820 2001-12-15  Ravi Pratap  <ravi@ximian.com>
24821
24822         * class.cs (Event::Define): Check that the type of the event is a delegate
24823         type else flag error #66.
24824
24825         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
24826         same.
24827
24828         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
24829         values of EntryPoint, CharSet etc etc.
24830
24831         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
24832
24833         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
24834         be null and we should ignore this. I am not sure if this is really clean. Apparently,
24835         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
24836         which needs this to do its work.
24837
24838         * ../errors/cs0066.cs : Add.
24839
24840 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
24841
24842         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
24843         helper functions.
24844
24845         * class.cs: (MethodSignature.MethodSignature): Removed hack that
24846         clears out the parameters field.
24847         (MemberSignatureCompare): Cleanup
24848
24849         (MemberCore): New base class used to share code between MethodCore
24850         and Property.
24851
24852         (RegisterRequiredImplementations) BindingFlags.Public requires
24853         either BindingFlags.Instace or Static.  Use instance here.
24854
24855         (Property): Refactored code to cope better with the full spec.
24856
24857         * parameter.cs (GetParameterInfo): Return an empty array instead
24858         of null on error.
24859
24860         * class.cs (Property): Abstract or extern properties have no bodies.
24861
24862         * parameter.cs (GetParameterInfo): return a zero-sized array.
24863
24864         * class.cs (TypeContainer.MethodModifiersValid): Move all the
24865         method modifier validation to the typecontainer so we can reuse
24866         this on properties.
24867
24868         (MethodCore.ParameterTypes): return an empty sized array of types.
24869
24870         (Property.Define): Test property modifier validity.
24871
24872         Add tests for sealed/override too.
24873
24874         (Method.Emit): abstract or extern methods have no bodies.
24875
24876 2001-12-14  Ravi Pratap  <ravi@ximian.com>
24877
24878         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
24879         thing.
24880
24881         (Method::Define, ::Emit): Modify accordingly.
24882
24883         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
24884
24885         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
24886
24887         * makefile: Pass in /unsafe.
24888
24889 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
24890
24891         * class.cs (MakeKey): Kill routine.
24892
24893         * class.cs (TypeContainer.Define): Correctly define explicit
24894         method implementations (they require the full interface name plus
24895         the method name).
24896
24897         * typemanager.cs: Deply the PtrHashtable here and stop using the
24898         lame keys.  Things work so much better.
24899
24900         This of course broke everyone who depended on `RegisterMethod' to
24901         do the `test for existance' test.  This has to be done elsewhere.
24902
24903         * support.cs (PtrHashtable): A hashtable that avoid comparing with
24904         the object stupid Equals method (because, that like fails all over
24905         the place).  We still do not use it.
24906
24907         * class.cs (TypeContainer.SetRequiredInterface,
24908         TypeContainer.RequireMethods): Killed these two routines and moved
24909         all the functionality to RegisterRequiredImplementations.
24910
24911         (TypeContainer.RegisterRequiredImplementations): This routine now
24912         registers all the implementations required in an array for the
24913         interfaces and abstract methods.  We use an array of structures
24914         which can be computed ahead of time to reduce memory usage and we
24915         also assume that lookups are cheap as most classes will not
24916         implement too many interfaces.
24917
24918         We also avoid creating too many MethodSignatures.
24919
24920         (TypeContainer.IsInterfaceMethod): Update and optionally does not
24921         clear the "pending" bit if we find that there are problems with
24922         the declaration.
24923
24924         (TypeContainer.VerifyPendingMethods): Update to report errors of
24925         methods that look like implementations but are not.
24926
24927         (TypeContainer.Define): Add support for explicit interface method
24928         implementation. 
24929
24930 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
24931
24932         * typemanager.cs: Keep track of the parameters here instead of
24933         being a feature of the TypeContainer.
24934
24935         * class.cs: Drop the registration of parameters here, as
24936         InterfaceMethods are also interface declarations.
24937
24938         * delegate.cs: Register methods with the TypeManager not only with
24939         the TypeContainer.  This code was buggy.
24940
24941         * interface.cs: Full registation here.
24942
24943 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
24944
24945         * expression.cs: Remove reducer for binary expressions, it can not
24946         be done this way.
24947
24948         * const.cs: Put here the code that used to go into constant.cs
24949
24950         * constant.cs: Put here the code for constants, this is a new base
24951         class for Literals.
24952
24953         * literal.cs: Make Literal derive from Constant.
24954
24955 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
24956
24957         * statement.cs (Return.Emit): Report error 157 if the user
24958         attempts to return from a finally block.
24959
24960         (Return.Emit): Instead of emitting a return, jump to the end of
24961         the function.
24962
24963         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
24964         LocalBuilder to store the result of the function.  ReturnLabel is
24965         the target where we jump.
24966
24967
24968 2001-12-09  Radek Doulik  <rodo@ximian.com>
24969
24970         * cs-parser.jay: remember alias in current namespace
24971
24972         * ecore.cs (SimpleName::DoResolve): use aliases for types or
24973         namespaces
24974
24975         * class.cs (LookupAlias): lookup alias in my_namespace
24976
24977         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
24978         aliases hashtable
24979         (LookupAlias): lookup alias in this and if needed in parent
24980         namespaces
24981
24982 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
24983
24984         * support.cs: 
24985
24986         * rootcontext.cs: (ModuleBuilder) Made static, first step into
24987         making things static.  I need this to avoid passing the
24988         TypeContainer when calling ParameterType.
24989
24990         * support.cs (InternalParameters.ParameterType): Remove ugly hack
24991         that did string manipulation to compute the type and then call
24992         GetType.  Use Parameter.ParameterType instead.
24993
24994         * cs-tokenizer.cs: Consume the suffix for floating values.
24995
24996         * expression.cs (ParameterReference): figure out whether this is a
24997         reference parameter or not.  Kill an extra variable by computing
24998         the arg_idx during emission.
24999
25000         * parameter.cs (Parameters.GetParameterInfo): New overloaded
25001         function that returns whether a parameter is an out/ref value or not.
25002
25003         (Parameter.ParameterType): The type of the parameter (base,
25004         without ref/out applied).
25005
25006         (Parameter.Resolve): Perform resolution here.
25007         (Parameter.ExternalType): The full type (with ref/out applied).
25008
25009         * statement.cs (Using.Emit, Using.EmitExpression): Implement
25010         support for expressions on the using statement.
25011
25012 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
25013
25014         * statement.cs (Using.EmitLocalVariableDecls): Split the
25015         localvariable handling of the using statement.
25016
25017         (Block.EmitMeta): Keep track of variable count across blocks.  We
25018         were reusing slots on separate branches of blocks.
25019
25020         (Try.Emit): Emit the general code block, we were not emitting it. 
25021
25022         Check the type of the declaration to be an IDisposable or
25023         something that can be implicity converted to it. 
25024
25025         Emit conversions if required.
25026
25027         * ecore.cs (EmptyExpression): New utility class.
25028         (Expression.ImplicitConversionExists): New utility function.
25029
25030 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
25031
25032         * statement.cs (Using): Implement.
25033
25034         * expression.cs (LocalVariableReference): Support read only variables.
25035
25036         * statement.cs: Remove the explicit emit for the Leave opcode.
25037         (VariableInfo): Add a readonly field.
25038
25039 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
25040
25041         * ecore.cs (ConvCast): new class used to encapsulate the various
25042         explicit integer conversions that works in both checked and
25043         unchecked contexts.
25044
25045         (Expression.ConvertNumericExplicit): Use new ConvCast class to
25046         properly generate the overflow opcodes.
25047
25048 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
25049
25050         * statement.cs: The correct type for the EmptyExpression is the
25051         element_type, not the variable type.  Ravi pointed this out.
25052
25053 2001-12-04  Ravi Pratap  <ravi@ximian.com>
25054
25055         * class.cs (Method::Define): Handle PInvoke methods specially
25056         by using DefinePInvokeMethod instead of the usual one.
25057
25058         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
25059         above to do the task of extracting information and defining the method.
25060
25061 2001-12-04  Ravi Pratap  <ravi@ximian.com>
25062
25063         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
25064         of the condition for string type.
25065
25066         (Emit): Move that here. 
25067
25068         (ArrayCreation::CheckIndices): Keep string literals in their expression
25069         form.
25070
25071         (EmitDynamicInitializers): Handle strings appropriately.
25072
25073 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
25074
25075         * codegen.cs (EmitContext): Replace multiple variables with a
25076         single pointer to the current Switch statement.
25077
25078         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
25079         EmitContext.
25080
25081 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
25082
25083         * statement.cs 
25084
25085         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
25086         default'.
25087
25088         (Foreach.Emit): Foreach on arrays was not setting
25089         up the loop variables (for break/continue).
25090
25091         (GotoCase): Semi-implented.
25092
25093 2001-12-03  Ravi Pratap  <ravi@ximian.com>
25094
25095         * attribute.cs (CheckAttribute): Handle system attributes by using
25096         Attribute.GetAttributes to examine information we need.
25097
25098         (GetValidPlaces): Same here.
25099
25100         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
25101
25102         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
25103
25104         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
25105
25106         (Method::Define): Set appropriate flags if we have a DllImport attribute.
25107
25108         (Method::Emit): Handle the case when we are a PInvoke method.
25109
25110 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
25111
25112         * expression.cs: Use ResolveWithSimpleName on compound names.
25113
25114 2001-12-02  Ravi Pratap  <ravi@ximian.com>
25115
25116         * constant.cs (EmitConstant): Make sure we resolve the associated expression
25117         before trying to reduce it.
25118
25119         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
25120
25121         * constant.cs (LookupConstantValue): Implement.
25122
25123         (EmitConstant): Use the above in emitting the constant.
25124
25125         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
25126         that are user-defined by doing a LookupConstantValue on them.
25127
25128         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
25129         too, like above.
25130
25131 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
25132
25133         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
25134
25135         (BaseAccess.DoResolve): Implement.
25136
25137         (MemberAccess.DoResolve): Split this routine into a
25138         ResolveMemberAccess routine that can be used independently
25139
25140 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
25141
25142         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
25143         As that share bits of the implementation.  Is returns a boolean,
25144         while As returns the Type that is being probed.
25145
25146 2001-12-01  Ravi Pratap  <ravi@ximian.com>
25147
25148         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
25149         instead of a Literal - much easier.
25150
25151         (EnumInTransit): Remove - utterly useless :-)
25152
25153         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
25154
25155         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
25156
25157         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
25158         chain when we have no associated expression.
25159
25160 2001-11-30  Ravi Pratap  <ravi@ximian.com>
25161
25162         * constant.cs (Define): Use Location while reporting the errror.
25163
25164         Also emit a warning when 'new' is used and there is no inherited
25165         member to hide.
25166
25167         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
25168         populated.
25169
25170         (LookupEnumValue): Implement to lookup an enum member's value and define it
25171         if necessary.
25172
25173         (Populate): Re-write accordingly to use the above routine.
25174
25175 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
25176
25177         * expression.cs (This): Fix prototype for DoResolveLValue to
25178         override the base class DoResolveLValue.
25179
25180         * cs-parser.cs: Report errors cs574 and cs575 (destructor
25181         declarations) 
25182
25183         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
25184         (we need to load the address of the field here).  This fixes
25185         test-22. 
25186
25187         (FieldExpr.DoResolveLValue): Call the DoResolve
25188         function to initialize the Instance expression.
25189
25190         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
25191         correctly the GetEnumerator operation on a value type.
25192
25193         * cs-parser.jay: Add more simple parsing error catches.
25194
25195         * statement.cs (Switch): Add support for string switches.
25196         Handle null specially.
25197
25198         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
25199
25200 2001-11-28  Ravi Pratap  <ravi@ximian.com>
25201
25202         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
25203
25204         (declare_local_constant): New helper function.
25205
25206         * statement.cs (AddConstant): Keep a separate record of constants
25207
25208         (IsConstant): Implement to determine if a variable is a constant.
25209
25210         (GetConstantExpression): Implement.
25211
25212         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
25213
25214         * statement.cs (IsVariableDefined): Re-write.
25215
25216 2001-11-27  Ravi Pratap  <ravi@ximian.com>
25217
25218         * class.cs (TypeContainer::FindMembers): Look for constants
25219         in the case when we are looking for MemberTypes.Field
25220
25221         * expression.cs (MemberAccess::DoResolve): Check that in the
25222         case we are a FieldExpr and a Literal, we are not being accessed
25223         by an instance reference.
25224
25225         * cs-parser.jay (local_constant_declaration): Implement.
25226
25227         (declaration_statement): Implement for constant declarations.
25228
25229 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
25230
25231         * statement.cs (Switch): Catch double defaults.
25232
25233         (Switch): More work on the switch() statement
25234         implementation.  It works for integral values now, need to finish
25235         string support.
25236
25237
25238 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
25239
25240         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
25241         integer literals into other integer literals.  To be used by
25242         switch. 
25243
25244 2001-11-24  Ravi Pratap  <ravi@ximian.com>
25245
25246         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
25247         some memory.
25248
25249         (EmitDynamicInitializers): Cope with the above since we extract data
25250         directly from ArrayData now.
25251
25252         (ExpectInitializers): Keep track of whether initializers are mandatory
25253         or not.
25254
25255         (Bounds): Make it a hashtable to prevent the same dimension being 
25256         recorded for every element in that dimension.
25257
25258         (EmitDynamicInitializers): Fix bug which prevented the Set array method
25259         from being found.
25260
25261         Also fix bug which was causing the indices to be emitted in the reverse
25262         order.
25263
25264 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
25265
25266         * expression.cs (ArrayCreation): Implement the bits that Ravi left
25267         unfinished.  They do not work, because the underlying code is
25268         sloppy.
25269
25270 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
25271
25272         * cs-parser.jay: Remove bogus fixme.
25273
25274         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
25275         on Switch statement.
25276
25277 2001-11-23  Ravi Pratap  <ravi@ximian.com>
25278
25279         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
25280         the same. 
25281
25282         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
25283         parameter. Apparently, any expression is allowed. 
25284
25285         (ValidateInitializers): Update accordingly.
25286
25287         (CheckIndices): Fix some tricky bugs thanks to recursion.
25288
25289         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
25290         I was being completely brain-dead.
25291
25292         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
25293         and re-write acordingly.
25294
25295         (DelegateInvocation): Re-write accordingly.
25296
25297         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
25298
25299         (MakeByteBlob): Handle types more correctly.
25300
25301         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
25302         initialization from expressions but it is incomplete because I am a complete
25303         Dodo :-|
25304
25305 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
25306
25307         * statement.cs (If.Emit): Fix a bug that generated incorrect code
25308         on If.  Basically, we have to return `true' (ie, we do return to
25309         our caller) only if both branches of the if return.
25310
25311         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
25312         short-circuit operators, handle them as short circuit operators. 
25313
25314         (Cast.DoResolve): Resolve type.
25315         (Cast.Cast): Take an expression as the target type.
25316
25317         * cs-parser.jay (cast_expression): Remove old hack that only
25318         allowed a limited set of types to be handled.  Now we take a
25319         unary_expression and we resolve to a type during semantic
25320         analysis.
25321
25322         Use the grammar productions from Rhys to handle casts (this is
25323         not complete like Rhys syntax yet, we fail to handle that corner
25324         case that C# has regarding (-x), but we will get there.
25325
25326 2001-11-22  Ravi Pratap  <ravi@ximian.com>
25327
25328         * class.cs (EmitFieldInitializer): Take care of the case when we have a
25329         field which is an array type.
25330
25331         * cs-parser.jay (declare_local_variables): Support array initialization too.
25332
25333         * typemanager.cs (MakeKey): Implement.
25334
25335         (everywhere): Use the above appropriately.
25336
25337         * cs-parser.jay (for_statement): Update for array initialization while
25338         declaring variables.
25339
25340         * ecore.cs : The error message was correct, it's the variable's names that
25341         were misleading ;-) Make the code more readable.
25342
25343         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
25344         the correct type etc.
25345
25346         (ConvertExplicit): Handle Enum types by examining the underlying type.
25347
25348 2001-11-21  Ravi Pratap  <ravi@ximian.com>
25349
25350         * parameter.cs (GetCallingConvention): Always return
25351         CallingConventions.Standard for now.
25352
25353 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
25354
25355         * expression.cs (Binary.ResolveOperator): Update the values of `l'
25356         and `r' after calling DoNumericPromotions.
25357
25358         * ecore.cs: Fix error message (the types were in the wrong order).
25359
25360         * statement.cs (Foreach.ProbeCollectionType): Need to pass
25361         BindingFlags.Instance as well 
25362
25363         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
25364         implicit int literal conversion in an empty cast so that we
25365         propagate the right type upstream.
25366
25367         (UnboxCast): new class used to unbox value types.
25368         (Expression.ConvertExplicit): Add explicit type conversions done
25369         by unboxing.
25370
25371         (Expression.ImplicitNumericConversion): Oops, forgot to test for
25372         the target type before applying the implicit LongLiterals to ULong
25373         literal cast.
25374
25375 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
25376
25377         * cs-parser.jay (for_statement): Reworked the way For works: now
25378         we declare manually any variables that are introduced in
25379         for_initializer to solve the problem of having out-of-band code
25380         emition (that is what got for broken).
25381
25382         (declaration_statement): Perform the actual variable declaration
25383         that used to be done in local_variable_declaration here.
25384
25385         (local_variable_declaration): Do not declare anything, just pass
25386         the information on a DictionaryEntry
25387
25388 2001-11-20  Ravi Pratap  <ravi@ximian.com>
25389
25390         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
25391         re-write of the logic to now make it recursive.
25392
25393         (UpdateIndices): Re-write accordingly.
25394
25395         Store element data in a separate ArrayData list in the above methods.
25396
25397         (MakeByteBlob): Implement to dump the array data into a byte array.
25398
25399 2001-11-19  Ravi Pratap  <ravi@ximian.com>
25400
25401         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
25402         into CheckIndices.
25403
25404         * constant.cs (Define): Implement.
25405
25406         (EmitConstant): Re-write fully.
25407
25408         Pass in location info.
25409
25410         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
25411         respectively.
25412
25413         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
25414         DictionaryEntry since we need location info too.
25415
25416         (constant_declaration): Update accordingly.
25417
25418         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
25419         code into another method : UpdateIndices.
25420
25421 2001-11-18  Ravi Pratap  <ravi@ximian.com>
25422
25423         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
25424         some type checking etc.
25425
25426 2001-11-17  Ravi Pratap  <ravi@ximian.com>
25427
25428         * expression.cs (ArrayCreation::ValidateInitializers): Implement
25429         bits to provide dimension info if the user skips doing that.
25430
25431         Update second constructor to store the rank correctly.
25432
25433 2001-11-16  Ravi Pratap  <ravi@ximian.com>
25434
25435         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
25436         and try to implement.
25437
25438         * ../errors/cs0150.cs : Add.
25439
25440         * ../errors/cs0178.cs : Add.
25441
25442 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
25443
25444         * statement.cs: Implement foreach on multi-dimensional arrays. 
25445
25446         * parameter.cs (Parameters.GetParameterByName): Also lookup the
25447         name of the params argument.
25448
25449         * expression.cs: Use EmitStoreOpcode to get the right opcode while
25450         initializing the array.
25451
25452         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
25453         we can use this elsewhere.
25454
25455         * statement.cs: Finish implementation of foreach for single
25456         dimension arrays.
25457
25458         * cs-parser.jay: Use an out-of-band stack to pass information
25459         around, I wonder why I need this.
25460
25461         foreach_block: Make the new foreach_block the current_block.
25462
25463         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
25464         function used to return a static Parameters structure.  Used for
25465         empty parameters, as those are created very frequently.
25466
25467         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
25468
25469 2001-11-15  Ravi Pratap  <ravi@ximian.com>
25470
25471         * interface.cs : Default modifier is private, not public. The
25472         make verify test passes again.
25473
25474 2001-11-15  Ravi Pratap  <ravi@ximian.com>
25475
25476         * support.cs (ReflectionParameters): Fix logic to determine
25477         whether the last parameter is a params one. Test 9 passes again.
25478
25479         * delegate.cs (Populate): Register the builders we define with
25480         RegisterParameterForBuilder. Test 19 passes again.
25481
25482         * cs-parser.jay (property_declaration): Reference $6 instead
25483         of $$ to get at the location.
25484
25485         (indexer_declaration): Similar stuff.
25486
25487         (attribute): Ditto.
25488
25489         * class.cs (Property): Register parameters for the Get and Set methods
25490         if they exist. Test 23 passes again.
25491
25492         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
25493         call to EmitArguments as we are sure there aren't any params arguments. 
25494         Test 32 passes again.
25495
25496         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
25497         IndexOutOfRangeException. 
25498
25499         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
25500         Test 33 now passes again.
25501
25502 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
25503
25504         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
25505         broke a bunch of things.  Will have to come up with a better way
25506         of tracking locations.
25507
25508         * statement.cs: Implemented foreach for single dimension arrays.
25509
25510 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
25511
25512         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
25513         an error.  This removes the lookup from the critical path.
25514
25515         * cs-parser.jay: Removed use of temporary_loc, which is completely
25516         broken. 
25517
25518 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
25519
25520         * support.cs (ReflectionParameters.ParameterModifier): Report
25521         whether the argument is a PARAMS argument or not.
25522
25523         * class.cs: Set the attribute `ParamArrayAttribute' on the
25524         parameter argument.
25525
25526         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
25527         and cons_param_array_attribute (ConstructorInfo for
25528         ParamArrayAttribute)., 
25529
25530         * codegen.cs: Emit the return using the `Return' statement, that
25531         way we can report the error correctly for missing return values. 
25532
25533         * class.cs (Method.Emit): Clean up.
25534
25535         * expression.cs (Argument.Resolve): Take another argument: the
25536         location where this argument is used.  Notice that this is not
25537         part of the "Argument" class as to reduce the size of the
25538         structure (we know the approximate location anyways).
25539
25540         Test if the argument is a variable-reference, if not, then
25541         complain with a 206.
25542
25543         (Argument.Emit): Emit addresses of variables.
25544
25545         (Argument.FullDesc): Simplify.
25546
25547         (Invocation.DoResolve): Update for Argument.Resolve.
25548
25549         (ElementAccess.DoResolve): ditto.
25550
25551         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
25552         method should be virtual, as this method is always virtual.
25553
25554         (NewDelegate.DoResolve): Update for Argument.Resolve.
25555
25556         * class.cs (ConstructorInitializer.DoResolve): ditto.
25557
25558         * attribute.cs (Attribute.Resolve): ditto.
25559
25560 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
25561
25562         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
25563
25564         * expression.cs (ParameterReference): Drop IStackStorage and implement
25565         IAssignMethod instead. 
25566
25567         (LocalVariableReference): ditto.
25568
25569         * ecore.cs (FieldExpr): Drop IStackStorage and implement
25570         IAssignMethod instead. 
25571
25572 2001-11-13  Miguel de Icaza <miguel@ximian.com>
25573
25574         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
25575         enumerations that are used in heavily used structures derive from
25576         byte in a laughable and pathetic attempt to reduce memory usage.
25577         This is the kind of pre-optimzations that you should not do at
25578         home without adult supervision.
25579
25580         * expression.cs (UnaryMutator): New class, used to handle ++ and
25581         -- separatedly from the other unary operators.  Cleans up the
25582         code, and kills the ExpressionStatement dependency in Unary.
25583
25584         (Unary): Removed `method' and `Arguments' from this class, making
25585         it smaller, and moving it all to SimpleCall, so I can reuse this
25586         code in other locations and avoid creating a lot of transient data
25587         strucutres when not required.
25588
25589         * cs-parser.jay: Adjust for new changes.
25590
25591 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
25592
25593         * enum.cs (Enum.Populate): If there is a failure during
25594         definition, return
25595
25596         * cs-parser.jay (opt_enum_base): we used to catch type errors
25597         here, but this is really incorrect.  The type error should be
25598         catched during semantic analysis.
25599
25600 2001-12-11  Ravi Pratap  <ravi@ximian.com>
25601
25602         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
25603         current_local_parameters as expected since I, in my stupidity, had forgotten
25604         to do this :-)
25605
25606         * attribute.cs (GetValidPlaces): Fix stupid bug.
25607
25608         * class.cs (Method::Emit): Perform check on applicability of attributes.
25609
25610         (Constructor::Emit): Ditto.
25611
25612         (Field::Emit): Ditto.
25613
25614         (Field.Location): Store location information.
25615
25616         (Property, Event, Indexer, Operator): Ditto.
25617
25618         * cs-parser.jay (field_declaration): Pass in location for each field.
25619
25620         * ../errors/cs0592.cs : Add.
25621
25622 2001-11-12  Ravi Pratap  <ravi@ximian.com>
25623
25624         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
25625
25626         (InitCoreTypes): Update accordingly.
25627
25628         (RegisterAttrType, LookupAttr): Implement.
25629
25630         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
25631         info about the same.
25632
25633         (Resolve): Update to populate the above as necessary.
25634
25635         (Error592): Helper.
25636
25637         (GetValidPlaces): Helper to the above.
25638
25639         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
25640
25641         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
25642
25643 2001-11-12  Ravi Pratap  <ravi@ximian.com>
25644
25645         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
25646
25647         * ../errors/cs0617.cs : Add.
25648
25649 2001-11-11  Ravi Pratap  <ravi@ximian.com>
25650
25651         * enum.cs (Emit): Rename to Populate to be more consistent with what
25652         we expect it to do and when exactly it is called.
25653
25654         * class.cs, rootcontext.cs : Update accordingly.
25655
25656         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
25657         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
25658
25659         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
25660
25661         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
25662         of a fieldinfo using the above, when dealing with a FieldBuilder.
25663
25664 2001-11-10  Ravi Pratap  <ravi@ximian.com>
25665
25666         * ../errors/cs0031.cs : Add.
25667
25668         * ../errors/cs1008.cs : Add.
25669
25670         * ../errrors/cs0543.cs : Add.
25671
25672         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
25673         enum type.
25674
25675         (FindMembers): Implement.
25676
25677         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
25678         enums and delegates too.
25679
25680         (enum_types): Rename to builder_to_enum.
25681
25682         (delegate_types): Rename to builder_to_delegate.
25683
25684         * delegate.cs (FindMembers): Implement.
25685
25686 2001-11-09  Ravi Pratap  <ravi@ximian.com>
25687
25688         * typemanager.cs (IsEnumType): Implement.
25689
25690         * enum.cs (Emit): Re-write parts to account for the underlying type
25691         better and perform checking etc.
25692
25693         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
25694         of the underlying type.
25695
25696         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
25697         value
25698
25699         * enum.cs (error31): Helper to report error #31.
25700
25701         * cs-parser.jay (enum_declaration): Store location of each member too.
25702
25703         * enum.cs (member_to_location): New hashtable. 
25704
25705         (AddEnumMember): Update location hashtable.
25706
25707         (Emit): Use the location of each member while reporting errors.
25708
25709 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
25710
25711         * cs-parser.jay: A for_initializer if is a
25712         local_variable_declaration really ammount to have an implicit
25713         block with the variable declaration and no initializer for for.
25714
25715         * statement.cs (For.Emit): Cope with null initializers.
25716
25717         This fixes the infinite loop on for initializers.
25718
25719 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
25720
25721         * enum.cs: More cleanup.
25722
25723         * ecore.cs: Remove dead code.
25724
25725         * class.cs (Property.Emit): More simplification.
25726         (Event.Emit): ditto.
25727
25728         Reworked to have less levels of indentation.
25729
25730 2001-11-08  Ravi Pratap  <ravi@ximian.com>
25731
25732         * class.cs (Property): Emit attributes.
25733
25734         (Field): Ditto.
25735
25736         (Event): Ditto.
25737
25738         (Indexer): Ditto.
25739
25740         (Operator): Ditto.
25741
25742         * enum.cs (Emit): Ditto.
25743
25744         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
25745         Enums too.
25746
25747         * class.cs (Field, Event, etc.): Move attribute generation into the
25748         Emit method everywhere.
25749
25750         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
25751         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
25752         as we had no way of defining nested enums !
25753
25754         * rootcontext.cs : Adjust code accordingly.
25755
25756         * typemanager.cs (AddEnumType): To keep track of enum types separately.
25757
25758 2001-11-07  Ravi Pratap  <ravi@ximian.com>
25759
25760         * expression.cs (EvalConstantExpression): Move into ecore.cs
25761
25762         * enum.cs (Enum): Rename some members and make them public and readonly
25763         according to our convention.
25764
25765         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
25766         nothing else.
25767
25768         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
25769
25770         (Enum::Emit): Write a simple version for now which doesn't try to compute
25771         expressions. I shall modify this to be more robust in just a while.
25772
25773         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
25774
25775         (TypeContainer::CloseType): Create the Enum types too.
25776
25777         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
25778
25779         * expression.cs (EvalConstantExpression): Get rid of completely.
25780
25781         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
25782         user-defined values and other cases.
25783
25784         (IsValidEnumLiteral): Helper function.
25785
25786         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
25787         out there in the case we had a literal FieldExpr.
25788
25789         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
25790
25791         (Literalize): Revamp a bit to take two arguments.
25792
25793         (EnumLiteral): New class which derives from Literal to wrap enum literals.
25794
25795 2001-11-06  Ravi Pratap  <ravi@ximian.com>
25796
25797         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
25798
25799         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
25800
25801         (Resolve): Use the above to ensure we have proper initializers.
25802
25803 2001-11-05  Ravi Pratap  <ravi@ximian.com>
25804
25805         * expression.cs (Expression::EvalConstantExpression): New method to 
25806         evaluate constant expressions.
25807
25808         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
25809
25810 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
25811
25812         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
25813         in an array.
25814
25815         (Binary.ResolveOperator): Handle operator != (object a, object b)
25816         and operator == (object a, object b);
25817
25818         (Binary.DoNumericPromotions): Indicate whether the numeric
25819         promotion was possible.
25820
25821         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
25822         Implement.  
25823
25824         Made the ArrayAccess implement interface IAssignMethod instead of
25825         IStackStore as the order in which arguments are passed reflects
25826         this.
25827
25828         * assign.cs: Instead of using expr.ExprClass to select the way of
25829         assinging, probe for the IStackStore/IAssignMethod interfaces.
25830
25831         * typemanager.cs: Load InitializeArray definition.
25832
25833         * rootcontext.cs (RootContext.MakeStaticData): Used to define
25834         static data that can be used to initialize arrays. 
25835
25836 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
25837
25838         * expression.cs: Handle operator== and operator!= for booleans.
25839
25840         (Conditioal.Reduce): Implement reducer for the ?: operator.
25841
25842         (Conditional.Resolve): Implement dead code elimination.
25843
25844         (Binary.Resolve): Catch string literals and return a new
25845         concatenated string.
25846
25847         (Unary.Reduce): Implement reduction of unary expressions.
25848
25849         * ecore.cs: Split out the expression core handling here.
25850
25851         (Expression.Reduce): New method used to perform constant folding
25852         and CSE.  This is needed to support constant-expressions. 
25853
25854         * statement.cs (Statement.EmitBoolExpression): Pass true and false
25855         targets, and optimize for !x.
25856
25857 2001-11-04  Ravi Pratap  <ravi@ximian.com>
25858
25859         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
25860         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
25861         set custom atttributes.
25862
25863         * literal.cs (Literal::GetValue): New abstract method to return the actual
25864         value of the literal, cast as an object.
25865
25866         (*Literal): Implement GetValue method.
25867
25868         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
25869         expressions to the arraylist but objects of type Argument.
25870
25871         * class.cs (TypeContainer::Emit): Emit our attributes too.
25872
25873         (Method::Emit, Constructor::Emit): Ditto.
25874
25875         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
25876         to be ignoring earlier.
25877
25878 2001-11-03  Ravi Pratap  <ravi@ximian.com>
25879
25880         * attribute.cs (AttributeSection::Define): Implement to do the business
25881         of constructing a CustomAttributeBuilder.
25882
25883         (Attribute): New trivial class. Increases readability of code.  
25884
25885         * cs-parser.jay : Update accordingly.
25886
25887         (positional_argument_list, named_argument_list, named_argument): New rules
25888
25889         (attribute_arguments): Use the above so that we are more correct.
25890
25891 2001-11-02  Ravi Pratap  <ravi@ximian.com>
25892
25893         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
25894         to perform all checks for a method with a params parameter.
25895
25896         (Invocation::OverloadResolve): Update to use the above method and therefore
25897         cope correctly with params method invocations.
25898
25899         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
25900         params too.
25901
25902         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
25903         constructors in our parent too because we can't afford to miss out on 
25904         protected ones ;-)
25905
25906         * attribute.cs (AttributeSection): New name for the class Attribute
25907
25908         Other trivial changes to improve readability.
25909
25910         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
25911         use the new class names.
25912
25913 2001-11-01  Ravi Pratap  <ravi@ximian.com>
25914
25915         * class.cs (Method::Define): Complete definition for params types too
25916
25917         (Indexer::Define): Ditto.
25918
25919         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
25920         Cope everywhere with a request for info about the array parameter.
25921
25922 2001-11-01  Ravi Pratap  <ravi@ximian.com>
25923
25924         * tree.cs (RecordNamespace): Fix up to check for the correct key.
25925
25926         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
25927         local_variable_type to extract the string corresponding to the type.
25928
25929         (local_variable_type): Fixup the action to use the new helper method.
25930
25931         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
25932         go.
25933
25934         * expression.cs : Clean out code which uses the above.
25935
25936 2001-10-31  Ravi Pratap  <ravi@ximian.com>
25937
25938         * typemanager.cs (RegisterMethod): Check if we already have an existing key
25939         and bale out if necessary by returning a false.
25940
25941         (RegisterProperty): Ditto.
25942
25943         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
25944         and print out appropriate error messages.
25945
25946         * interface.cs (everywhere): Ditto.
25947
25948         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
25949         location to constructor.
25950
25951         * class.cs (Property, Event, Indexer): Update accordingly.
25952
25953         * ../errors/cs111.cs : Added.
25954
25955         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
25956         of a method, as laid down by the spec.
25957
25958         (Invocation::OverloadResolve): Use the above method.
25959
25960 2001-10-31  Ravi Pratap  <ravi@ximian.com>
25961
25962         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
25963         now take a TypeContainer and a Parameters object.
25964
25965         (ParameterData): Modify return type of ParameterModifier method to be 
25966         Parameter.Modifier and not a string.
25967
25968         (ReflectionParameters, InternalParameters): Update accordingly.
25969
25970         * expression.cs (Argument::GetParameterModifier): Same here.
25971
25972         * support.cs (InternalParameters::ParameterType): Find a better way of determining
25973         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
25974         symbol in it at all so maybe this is only for now.
25975
25976 2001-10-30  Ravi Pratap  <ravi@ximian.com>
25977
25978         * support.cs (InternalParameters): Constructor now takes an extra argument 
25979         which is the actual Parameters class.
25980
25981         (ParameterDesc): Update to provide info on ref/out modifiers.
25982
25983         * class.cs (everywhere): Update call to InternalParameters to pass in
25984         the second argument too.
25985
25986         * support.cs (ParameterData): Add ParameterModifier, which is a method 
25987         to return the modifier info [ref/out etc]
25988
25989         (InternalParameters, ReflectionParameters): Implement the above.
25990
25991         * expression.cs (Argument::ParameterModifier): Similar function to return
25992         info about the argument's modifiers.
25993
25994         (Invocation::OverloadResolve): Update to take into account matching modifiers 
25995         too.
25996
25997         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
25998         a new SetFormalParameters object which we pass to InternalParameters.
25999
26000 2001-10-30  Ravi Pratap  <ravi@ximian.com>
26001
26002         * expression.cs (NewArray): Merge into the ArrayCreation class.
26003
26004 2001-10-29  Ravi Pratap  <ravi@ximian.com>
26005
26006         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
26007         NewUserdefinedArray into one as there wasn't much of a use in having
26008         two separate ones.
26009
26010         * expression.cs (Argument): Change field's name to ArgType from Type.
26011
26012         (Type): New readonly property which returns the proper type, taking into 
26013         account ref/out modifiers.
26014
26015         (everywhere): Adjust code accordingly for the above.
26016
26017         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
26018         whether we are emitting for a ref or out parameter.
26019
26020         * expression.cs (Argument::Emit): Use the above field to set the state.
26021
26022         (LocalVariableReference::Emit): Update to honour the flag and emit the
26023         right stuff.
26024
26025         * parameter.cs (Attributes): Set the correct flags for ref parameters.
26026
26027         * expression.cs (Argument::FullDesc): New function to provide a full desc.
26028
26029         * support.cs (ParameterData): Add method ParameterDesc to the interface.
26030
26031         (ReflectionParameters, InternalParameters): Implement the above method.
26032
26033         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
26034         reporting errors.
26035
26036         (Invocation::FullMethodDesc): Ditto. 
26037
26038 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
26039
26040         * cs-parser.jay: Add extra production for the second form of array
26041         creation. 
26042
26043         * expression.cs (ArrayCreation): Update to reflect the above
26044         change. 
26045
26046         * Small changes to prepare for Array initialization.
26047
26048 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
26049
26050         * typemanager.cs (ImplementsInterface): interface might be null;
26051         Deal with this problem;
26052
26053         Also, we do store negative hits on the cache (null values), so use
26054         this instead of calling t.GetInterfaces on the type everytime.
26055
26056 2001-10-28  Ravi Pratap  <ravi@ximian.com>
26057
26058         * typemanager.cs (IsBuiltinType): New method to help determine the same.
26059
26060         * expression.cs (New::DoResolve): Get rid of array creation code and instead
26061         split functionality out into different classes.
26062
26063         (New::FormArrayType): Move into NewBuiltinArray.
26064
26065         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
26066         quite useless.
26067
26068         (NewBuiltinArray): New class to handle creation of built-in arrays.
26069
26070         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
26071         account creation of one-dimensional arrays.
26072
26073         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
26074
26075         (NewUserdefinedArray::DoResolve): Implement.
26076
26077         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
26078
26079         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
26080         we maintain inside the TypeManager. This is necessary to perform lookups on the
26081         module builder.
26082
26083         (LookupType): Update to perform GetType on the module builders too.     
26084
26085         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
26086
26087         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
26088
26089 2001-10-23  Ravi Pratap  <ravi@ximian.com>
26090
26091         * expression.cs (New::DoResolve): Implement guts of array creation.
26092
26093         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
26094
26095 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
26096
26097         * expression.cs: Fix bug I introduced lsat night that broke
26098         Delegates. 
26099
26100         (Expression.Resolve): Report a 246 error (can not resolve name)
26101         if we find a SimpleName in the stream.
26102
26103         (Expression.ResolveLValue): Ditto.
26104
26105         (Expression.ResolveWithSimpleName): This function is a variant of
26106         ResolveName, this one allows SimpleNames to be returned without a
26107         warning.  The only consumer of SimpleNames is MemberAccess
26108
26109 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
26110
26111         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
26112         might arrive here.  I have my doubts that this is correct.
26113
26114         * statement.cs (Lock): Implement lock statement.
26115
26116         * cs-parser.jay: Small fixes to support `lock' and `using'
26117
26118         * cs-tokenizer.cs: Remove extra space
26119
26120         * driver.cs: New flag --checked, allows to turn on integer math
26121         checking. 
26122
26123         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
26124         Threading.Monitor.Exit 
26125
26126 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
26127
26128         * expression.cs (IndexerAccess::DoResolveLValue): Set the
26129         Expression Class to be IndexerAccess.
26130
26131         Notice that Indexer::DoResolve sets the eclass to Value.
26132
26133 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
26134
26135         * class.cs (TypeContainer::Emit): Emit code for indexers.
26136
26137         * assign.cs (IAssignMethod): New interface implemented by Indexers
26138         and Properties for handling assignment.
26139
26140         (Assign::Emit): Simplify and reuse code. 
26141
26142         * expression.cs (IndexerAccess, PropertyExpr): Implement
26143         IAssignMethod, clean up old code. 
26144
26145 2001-10-22  Ravi Pratap  <ravi@ximian.com>
26146
26147         * typemanager.cs (ImplementsInterface): New method to determine if a type
26148         implements a given interface. Provides a nice cache too.
26149
26150         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
26151         method.
26152
26153         (ConvertReferenceExplicit): Ditto.
26154
26155         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
26156         various methods, with correct names etc.
26157
26158         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
26159         Operator.UnaryNegation.
26160
26161         * cs-parser.jay (operator_declarator): Be a little clever in the case where
26162         we have a unary plus or minus operator.
26163
26164         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
26165         UnaryMinus.
26166
26167         * everywhere : update accordingly.
26168
26169         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
26170         respectively.
26171
26172         * class.cs (Method::Define): For the case where we are implementing a method
26173         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
26174         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
26175
26176 2001-10-21  Ravi Pratap  <ravi@ximian.com>
26177
26178         * interface.cs (FindMembers): Implement to work around S.R.E
26179         lameness.
26180
26181         * typemanager.cs (IsInterfaceType): Implement.
26182
26183         (FindMembers): Update to handle interface types too.
26184
26185         * expression.cs (ImplicitReferenceConversion): Re-write bits which
26186         use IsAssignableFrom as that is not correct - it doesn't work.
26187
26188         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
26189         and accordingly override EmitStatement.
26190
26191         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
26192         using the correct logic :-)
26193
26194 2001-10-19  Ravi Pratap  <ravi@ximian.com>
26195
26196         * ../errors/cs-11.cs : Add to demonstrate error -11 
26197
26198 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
26199
26200         * assign.cs (Assign::Resolve): Resolve right hand side first, and
26201         then pass this as a hint to ResolveLValue.
26202
26203         * expression.cs (FieldExpr): Add Location information
26204
26205         (FieldExpr::LValueResolve): Report assignment to readonly
26206         variable. 
26207
26208         (Expression::ExprClassFromMemberInfo): Pass location information.
26209
26210         (Expression::ResolveLValue): Add new method that resolves an
26211         LValue. 
26212
26213         (Expression::DoResolveLValue): Default invocation calls
26214         DoResolve. 
26215
26216         (Indexers): New class used to keep track of indexers in a given
26217         Type. 
26218
26219         (IStackStore): Renamed from LValue, as it did not really describe
26220         what this did.  Also ResolveLValue is gone from this interface and
26221         now is part of Expression.
26222
26223         (ElementAccess): Depending on the element access type
26224
26225         * typemanager.cs: Add `indexer_name_type' as a Core type
26226         (System.Runtime.CompilerServices.IndexerNameAttribute)
26227
26228         * statement.cs (Goto): Take a location.
26229
26230 2001-10-18  Ravi Pratap  <ravi@ximian.com>
26231
26232         * delegate.cs (Delegate::VerifyDelegate): New method to verify
26233         if two delegates are compatible.
26234
26235         (NewDelegate::DoResolve): Update to take care of the case when
26236         we instantiate a delegate from another delegate.
26237
26238         * typemanager.cs (FindMembers): Don't even try to look up members
26239         of Delegate types for now.
26240
26241 2001-10-18  Ravi Pratap  <ravi@ximian.com>
26242
26243         * delegate.cs (NewDelegate): New class to take care of delegate
26244         instantiation.
26245
26246         * expression.cs (New): Split the delegate related code out into 
26247         the NewDelegate class.
26248
26249         * delegate.cs (DelegateInvocation): New class to handle delegate 
26250         invocation.
26251
26252         * expression.cs (Invocation): Split out delegate related code into
26253         the DelegateInvocation class.
26254
26255 2001-10-17  Ravi Pratap  <ravi@ximian.com>
26256
26257         * expression.cs (New::DoResolve): Implement delegate creation fully
26258         and according to the spec.
26259
26260         (New::DoEmit): Update to handle delegates differently.
26261
26262         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
26263         because of which we were printing out arguments in reverse order !
26264
26265         * delegate.cs (VerifyMethod): Implement to check if the given method
26266         matches the delegate.
26267
26268         (FullDelegateDesc): Implement.
26269
26270         (VerifyApplicability): Implement.
26271
26272         * expression.cs (Invocation::DoResolve): Update to accordingly handle
26273         delegate invocations too.
26274
26275         (Invocation::Emit): Ditto.
26276
26277         * ../errors/cs1593.cs : Added.
26278
26279         * ../errors/cs1594.cs : Added.
26280
26281         * delegate.cs (InstanceExpression, TargetMethod): New properties.
26282
26283 2001-10-16  Ravi Pratap  <ravi@ximian.com>
26284
26285         * typemanager.cs (intptr_type): Core type for System.IntPtr
26286
26287         (InitCoreTypes): Update for the same.
26288
26289         (iasyncresult_type, asynccallback_type): Ditto.
26290
26291         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
26292         correct.
26293
26294         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
26295         too.
26296
26297         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
26298         the builders for the 4 members of a delegate type :-)
26299
26300         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
26301         type.
26302
26303         * expression.cs (New::DoResolve): Implement guts for delegate creation.
26304
26305         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
26306
26307 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
26308
26309         * statement.cs (Break::Emit): Implement.   
26310         (Continue::Emit): Implement.
26311
26312         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
26313         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
26314         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
26315         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
26316         end loop
26317
26318         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
26319         properties that track the label for the current loop (begin of the
26320         loop and end of the loop).
26321
26322 2001-10-15  Ravi Pratap  <ravi@ximian.com>
26323
26324         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
26325         use of emitting anything at all.
26326
26327         * class.cs, rootcontext.cs : Get rid of calls to the same.
26328
26329         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
26330
26331         (Populate): Define the constructor correctly and set the implementation
26332         attributes.
26333
26334         * typemanager.cs (delegate_types): New hashtable to hold delegates that
26335         have been defined.
26336
26337         (AddDelegateType): Implement.
26338
26339         (IsDelegateType): Implement helper method.
26340
26341         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
26342
26343         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
26344         and accordingly handle it.
26345
26346         * delegate.cs (Populate): Take TypeContainer argument.
26347         Implement bits to define the Invoke method. However, I still haven't figured out
26348         how to take care of the native int bit :-(
26349
26350         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
26351         Qualify the name of the delegate, not its return type !
26352
26353         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
26354         conversion.
26355
26356         (StandardConversionExists): Checking for array types turns out to be recursive.
26357
26358         (ConvertReferenceExplicit): Implement array conversion.
26359
26360         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
26361
26362 2001-10-12  Ravi Pratap  <ravi@ximian.com>
26363
26364         * cs-parser.jay (delegate_declaration): Store the fully qualified
26365         name as it is a type declaration.
26366
26367         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
26368         readonly.
26369
26370         (DefineDelegate): Renamed from Define. Does the same thing essentially,
26371         as TypeContainer::DefineType.
26372
26373         (Populate): Method in which all the definition of the various methods (Invoke)
26374         etc is done.
26375
26376         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
26377         see.
26378
26379         (CloseDelegate): Finally creates the delegate.
26380
26381         * class.cs (TypeContainer::DefineType): Update to define delegates.
26382         (Populate, Emit and CloseType): Do the same thing here too.
26383
26384         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
26385         delegates in all these operations.
26386
26387 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
26388
26389         * expression.cs: LocalTemporary: a new expression used to
26390         reference a temporary that has been created.
26391
26392         * assign.cs: Handle PropertyAccess back here, so that we can
26393         provide the proper semantic access to properties.
26394
26395         * expression.cs (Expression::ConvertReferenceExplicit): Implement
26396         a few more explicit conversions. 
26397
26398         * modifiers.cs: `NEW' modifier maps to HideBySig.
26399
26400         * expression.cs (PropertyExpr): Make this into an
26401         ExpressionStatement, and support the EmitStatement code path. 
26402
26403         Perform get/set error checking, clean up the interface.
26404
26405         * assign.cs: recognize PropertyExprs as targets, and if so, turn
26406         them into toplevel access objects.
26407
26408 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
26409
26410         * expression.cs: PropertyExpr::PropertyExpr: use work around the
26411         SRE.
26412
26413         * typemanager.cs: Keep track here of our PropertyBuilders again to
26414         work around lameness in SRE.
26415
26416 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
26417
26418         * expression.cs (LValue::LValueResolve): New method in the
26419         interface, used to perform a second resolution pass for LValues. 
26420
26421         (This::DoResolve): Catch the use of this in static methods.
26422
26423         (This::LValueResolve): Implement.
26424
26425         (This::Store): Remove warning, assigning to `this' in structures
26426         is 
26427
26428         (Invocation::Emit): Deal with invocation of
26429         methods on value types.  We need to pass the address to structure
26430         methods rather than the object itself.  (The equivalent code to
26431         emit "this" for structures leaves the entire structure on the
26432         stack instead of a pointer to it). 
26433
26434         (ParameterReference::DoResolve): Compute the real index for the
26435         argument based on whether the method takes or not a `this' pointer
26436         (ie, the method is static).
26437
26438         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
26439         value types returned from functions when we need to invoke a
26440         method on the sturcture.
26441
26442
26443 2001-10-11  Ravi Pratap  <ravi@ximian.com>
26444
26445         * class.cs (TypeContainer::DefineType): Method to actually do the business of
26446         defining the type in the Modulebuilder or Typebuilder. This is to take
26447         care of nested types which need to be defined on the TypeBuilder using
26448         DefineNestedMethod.
26449
26450         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
26451         methods in RootContext, only ported to be part of TypeContainer.
26452
26453         (TypeContainer::GetInterfaceOrClass): Ditto.
26454
26455         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
26456
26457         * interface.cs (Interface::DefineInterface): New method. Does exactly
26458         what RootContext.CreateInterface did earlier, only it takes care of nested types 
26459         too.
26460
26461         (Interface::GetInterfaces): Move from RootContext here and port.
26462
26463         (Interface::GetInterfaceByName): Same here.
26464
26465         * rootcontext.cs (ResolveTree): Re-write.
26466
26467         (PopulateTypes): Re-write.
26468
26469         * class.cs (TypeContainer::Populate): Populate nested types too.
26470         (TypeContainer::Emit): Emit nested members too.
26471
26472         * typemanager.cs (AddUserType): Do not make use of the FullName property,
26473         instead just use the name argument passed in as it is already fully
26474         qualified.
26475
26476         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
26477         to TypeContainer mapping to see if a type is user-defined.
26478
26479         * class.cs (TypeContainer::CloseType): Implement. 
26480
26481         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
26482         the default constructor.
26483
26484         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
26485         twice.
26486
26487         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
26488
26489         * interface.cs (CloseType): Create the type here.
26490
26491         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
26492         the hierarchy.
26493
26494         Remove all the methods which are now in TypeContainer.
26495
26496 2001-10-10  Ravi Pratap  <ravi@ximian.com>
26497
26498         * delegate.cs (Define): Re-write bits to define the delegate
26499         correctly.
26500
26501 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
26502
26503         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
26504
26505         * expression.cs (ImplicitReferenceConversion): handle null as well
26506         as a source to convert to any reference type.
26507
26508         * statement.cs (Return): Perform any implicit conversions to
26509         expected return type.  
26510
26511         Validate use of return statement.  
26512
26513         * codegen.cs (EmitContext): Pass the expected return type here.
26514
26515         * class.cs (Method, Constructor, Property): Pass expected return
26516         type to EmitContext.
26517
26518 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
26519
26520         * expression.cs: Make DoResolve take an EmitContext instead of a
26521         TypeContainer.
26522
26523         Replaced `l' and `location' for `loc', for consistency.
26524
26525         (Error, Warning): Remove unneeded Tc argument.
26526
26527         * assign.cs, literal.cs, constant.cs: Update to new calling
26528         convention. 
26529
26530         * codegen.cs: EmitContext now contains a flag indicating whether
26531         code is being generated in a static method or not.
26532
26533         * cs-parser.jay: DecomposeQI, new function that replaces the old
26534         QualifiedIdentifier.  Now we always decompose the assembled
26535         strings from qualified_identifier productions into a group of
26536         memberaccesses.
26537
26538 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
26539
26540         * rootcontext.cs: Deal with field-less struct types correctly now
26541         by passing the size option to Define Type.
26542
26543         * class.cs: Removed hack that created one static field. 
26544
26545 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
26546
26547         * statement.cs: Moved most of the code generation here. 
26548
26549 2001-10-09  Ravi Pratap  <ravi@ximian.com>
26550
26551         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
26552         seem very right.
26553
26554         (ElementAccess): Remove useless bits for now - keep checks as the spec
26555         says.
26556
26557 2001-10-08  Ravi Pratap  <ravi@ximian.com>
26558
26559         * expression.cs (ElementAccess::DoResolve): Remove my crap code
26560         and start performing checks according to the spec.
26561
26562 2001-10-07  Ravi Pratap  <ravi@ximian.com>
26563
26564         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
26565         rank_specifiers instead.
26566
26567         (rank_specifiers): Change the order in which the rank specifiers are stored
26568
26569         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
26570
26571         * expression.cs (ElementAccess): Implement the LValue interface too.
26572
26573 2001-10-06  Ravi Pratap  <ravi@ximian.com>
26574
26575         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
26576         except that user defined conversions are not included.
26577
26578         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
26579         perform the conversion of the return type, if necessary.
26580
26581         (New::DoResolve): Check whether we are creating an array or an object
26582         and accordingly do the needful.
26583
26584         (New::Emit): Same here.
26585
26586         (New::DoResolve): Implement guts of array creation.
26587
26588         (New::FormLookupType): Helper function.
26589
26590 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
26591
26592         * codegen.cs: Removed most of the code generation here, and move the
26593         corresponding code generation bits to the statement classes. 
26594
26595         Added support for try/catch/finalize and throw.
26596
26597         * cs-parser.jay: Added support for try/catch/finalize.
26598
26599         * class.cs: Catch static methods having the flags override,
26600         virtual or abstract.
26601
26602         * expression.cs (UserCast): This user cast was not really doing
26603         what it was supposed to do.  Which is to be born in fully resolved
26604         state.  Parts of the resolution were being performed at Emit time! 
26605
26606         Fixed this code.
26607
26608 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
26609
26610         * expression.cs: Implicity convert the result from UserCast.
26611
26612 2001-10-05  Ravi Pratap  <ravi@ximian.com>
26613
26614         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
26615         prevented it from working correctly. 
26616
26617         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
26618         merely ConvertImplicit.
26619
26620 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
26621
26622         * typemanager.cs: Make the LookupTypeContainer function static,
26623         and not per-instance.  
26624
26625         * class.cs: Make static FindMembers (the one that takes a Type
26626         argument). 
26627
26628         * codegen.cs: Add EmitForeach here.
26629
26630         * cs-parser.jay: Make foreach a toplevel object instead of the
26631         inline expansion, as we need to perform semantic analysis on it. 
26632
26633 2001-10-05  Ravi Pratap  <ravi@ximian.com>
26634
26635         * expression.cs (Expression::ImplicitUserConversion): Rename to
26636         UserDefinedConversion.
26637
26638         (Expression::UserDefinedConversion): Take an extra argument specifying 
26639         whether we look for explicit user conversions too.
26640
26641         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
26642
26643         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
26644
26645         (ExplicitUserConversion): Make it a call to UserDefinedConversion
26646         with the appropriate arguments.
26647
26648         * cs-parser.jay (cast_expression): Record location too.
26649
26650         * expression.cs (Cast): Record location info.
26651
26652         (Expression::ConvertExplicit): Take location argument.
26653
26654         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
26655         to determine if we are doing explicit conversions.
26656
26657         (UserCast::Emit): Update accordingly.
26658
26659         (Expression::ConvertExplicit): Report an error if everything fails.
26660
26661         * ../errors/cs0030.cs : Add.
26662
26663 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
26664
26665         * modifiers.cs: If the ABSTRACT keyword is present, also set the
26666         virtual and newslot bits. 
26667
26668         * class.cs (TypeContainer::RegisterRequiredImplementations):
26669         Record methods we need.
26670
26671         (TypeContainer::MakeKey): Helper function to make keys for
26672         MethodBases, since the Methodbase key is useless.
26673
26674         (TypeContainer::Populate): Call RegisterRequiredImplementations
26675         before defining the methods.   
26676
26677         Create a mapping for method_builders_to_methods ahead of time
26678         instead of inside a tight loop.
26679
26680         (::RequireMethods):  Accept an object as the data to set into the
26681         hashtable so we can report interface vs abstract method mismatch.
26682
26683 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
26684
26685         * report.cs: Make all of it static.
26686
26687         * rootcontext.cs: Drop object_type and value_type computations, as
26688         we have those in the TypeManager anyways.
26689
26690         Drop report instance variable too, now it is a global.
26691
26692         * driver.cs: Use try/catch on command line handling.
26693
26694         Add --probe option to debug the error reporting system with a test
26695         suite. 
26696
26697         * report.cs: Add support for exiting program when a probe
26698         condition is reached.
26699
26700 2001-10-03  Ravi Pratap  <ravi@ximian.com>
26701
26702         * expression.cs (Binary::DoNumericPromotions): Fix the case when
26703         we do a forcible conversion regardless of type, to check if 
26704         ForceConversion returns a null.
26705
26706         (Binary::error19): Use location to report error.
26707
26708         (Unary::error23): Use location here too.
26709
26710         * ../errors/cs0019.cs : Check in.
26711
26712         * ../errors/cs0023.cs : Check in.
26713
26714         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
26715         case of a non-null MethodInfo object with a length of 0 !
26716
26717         (Binary::ResolveOperator): Flag error if overload resolution fails to find
26718         an applicable member - according to the spec :-)
26719         Also fix logic to find members in base types.
26720
26721         (Unary::ResolveOperator): Same here.
26722
26723         (Unary::report23): Change name to error23 and make first argument a TypeContainer
26724         as I was getting thoroughly confused between this and error19 :-)
26725
26726         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
26727         (::FindMostEncompassedType): Implement.
26728         (::FindMostEncompassingType): Implement.
26729         (::StandardConversionExists): Implement.
26730
26731         (UserImplicitCast): Re-vamp. We now need info about most specific
26732         source and target types so that we can do the necessary conversions.
26733
26734         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
26735         mathematical union with no duplicates.
26736
26737 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
26738
26739         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
26740         in order from base classes to child classes, so that we can in
26741         child classes look up in our parent for method names and
26742         attributes (required for handling abstract, virtual, new, override
26743         constructs: we need to instrospect our base class, and if we dont
26744         populate the classes in order, the introspection might be
26745         incorrect.  For example, a method could query its parent before
26746         the parent has any methods and would determine that the parent has
26747         no abstract methods (while it could have had them)).
26748
26749         (RootContext::CreateType): Record the order in which we define the
26750         classes.
26751
26752 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
26753
26754         * class.cs (TypeContainer::Populate): Also method definitions can
26755         fail now, keep track of this.
26756
26757         (TypeContainer::FindMembers): Implement support for
26758         DeclaredOnly/noDeclaredOnly flag.
26759
26760         (Constructor::Emit) Return the ConstructorBuilder.
26761
26762         (Method::Emit) Return the MethodBuilder. 
26763         Check for abstract or virtual methods to be public.
26764
26765         * rootcontext.cs (RootContext::CreateType): Register all the
26766         abstract methods required for the class to be complete and the
26767         interface methods that must be implemented. 
26768
26769         * cs-parser.jay: Report error 501 (method requires body if it is
26770         not marked abstract or extern).
26771
26772         * expression.cs (TypeOf::Emit): Implement.
26773
26774         * typemanager.cs: runtime_handle_type, new global type.
26775
26776         * class.cs (Property::Emit): Generate code for properties.
26777
26778 2001-10-02  Ravi Pratap  <ravi@ximian.com>
26779
26780         * expression.cs (Unary::ResolveOperator): Find operators on base type
26781         too - we now conform exactly to the spec.
26782
26783         (Binary::ResolveOperator): Same here.
26784
26785         * class.cs (Operator::Define): Fix minor quirk in the tests.
26786
26787         * ../errors/cs0215.cs : Added.
26788
26789         * ../errors/cs0556.cs : Added.
26790
26791         * ../errors/cs0555.cs : Added.
26792
26793 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
26794
26795         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
26796         single integer which is really efficient
26797
26798 2001-10-01  Ravi Pratap  <ravi@ximian.com>
26799
26800         *  expression.cs (Expression::ImplicitUserConversion): Use location
26801         even in the case when we are examining True operators.
26802  
26803         * class.cs (Operator::Define): Perform extensive checks to conform
26804         with the rules for operator overloading in the spec.
26805
26806         * expression.cs (Expression::ImplicitReferenceConversion): Implement
26807         some of the other conversions mentioned in the spec.
26808
26809         * typemanager.cs (array_type): New static member for the System.Array built-in
26810         type.
26811
26812         (cloneable_interface): For System.ICloneable interface.
26813
26814         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
26815         we start resolving the tree and populating types.
26816
26817         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
26818  
26819 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
26820
26821         * expression.cs (Expression::ExprClassFromMemberInfo,
26822         Expression::Literalize): Create literal expressions from
26823         FieldInfos which are literals.
26824
26825         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
26826         type casts, because they were wrong.  The test suite in tests
26827         caught these ones.
26828
26829         (ImplicitNumericConversion): ushort to ulong requires a widening
26830         cast. 
26831
26832         Int32 constant to long requires widening cast as well.
26833
26834         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
26835         for integers because the type on the stack is not i4.
26836
26837 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
26838
26839         * expression.cs (report118): require location argument. 
26840
26841         * parameter.cs: Do not dereference potential null value.
26842
26843         * class.cs: Catch methods that lack the `new' keyword when
26844         overriding a name.  Report warnings when `new' is used without
26845         anything being there to override.
26846
26847         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
26848
26849         * class.cs: Only add constructor to hashtable if it is non-null
26850         (as now constructors can fail on define).
26851
26852         (TypeManager, Class, Struct): Take location arguments.
26853
26854         Catch field instance initialization in structs as errors.
26855
26856         accepting_filter: a new filter for FindMembers that is static so
26857         that we dont create an instance per invocation.
26858
26859         (Constructor::Define): Catch errors where a struct constructor is
26860         parameterless 
26861
26862         * cs-parser.jay: Pass location information for various new
26863         constructs. 
26864
26865         * delegate.cs (Delegate): take a location argument.
26866
26867         * driver.cs: Do not call EmitCode if there were problesm in the
26868         Definition of the types, as many Builders wont be there. 
26869
26870         * decl.cs (Decl::Decl): Require a location argument.
26871
26872         * cs-tokenizer.cs: Handle properly hex constants that can not fit
26873         into integers, and find the most appropiate integer for it.
26874
26875         * literal.cs: Implement ULongLiteral.
26876
26877         * rootcontext.cs: Provide better information about the location of
26878         failure when CreateType fails.
26879
26880 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
26881
26882         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
26883         as well.
26884
26885         * expression.cs (Binary::CheckShiftArguments): Add missing type
26886         computation.
26887         (Binary::ResolveOperator): Add type to the logical and and logical
26888         or, Bitwise And/Or and Exclusive Or code paths, it was missing
26889         before.
26890
26891         (Binary::DoNumericPromotions): In the case where either argument
26892         is ulong (and most signed types combined with ulong cause an
26893         error) perform implicit integer constant conversions as well.
26894
26895 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
26896
26897         * expression.cs (UserImplicitCast): Method should always be
26898         non-null. 
26899         (Invocation::BetterConversion): Simplified test for IntLiteral.
26900
26901         (Expression::ImplicitNumericConversion): Split this routine out.
26902         Put the code that performs implicit constant integer conversions
26903         here. 
26904
26905         (Expression::Resolve): Become a wrapper around DoResolve so we can
26906         check eclass and type being set after resolve.
26907
26908         (Invocation::Badness): Remove this dead function
26909
26910         (Binary::ResolveOperator): Do not compute the expensive argumnets
26911         unless we have a union for it.
26912
26913         (Probe::Emit): Is needs to do an isinst and then
26914         compare against null.
26915
26916         (::CanConvert): Added Location argument.  If the Location argument
26917         is null (Location.Null), then we do not report errors.  This is
26918         used by the `probe' mechanism of the Explicit conversion.  We do
26919         not want to generate an error for something that the user
26920         explicitly requested to be casted.  But the pipeline for an
26921         explicit cast first tests for potential implicit casts.
26922
26923         So for now, if the Location is null, it means `Probe only' to
26924         avoid adding another argument.   Might have to revise this
26925         strategy later.
26926
26927         (ClassCast): New class used to type cast objects into arbitrary
26928         classes (used in Explicit Reference Conversions).
26929
26930         Implement `as' as well.
26931
26932         Reverted all the patches from Ravi below: they were broken:
26933
26934                 * The use of `level' as a mechanism to stop recursive
26935                   invocations is wrong.  That was there just to catch the
26936                   bug with a strack trace but not as a way of addressing
26937                   the problem.
26938
26939                   To fix the problem we have to *understand* what is going
26940                   on and the interactions and come up with a plan, not
26941                   just get things going.
26942
26943                 * The use of the type conversion cache that I proposed
26944                   last night had an open topic: How does this work across
26945                   protection domains.  A user defined conversion might not
26946                   be public in the location where we are applying the
26947                   conversion, a different conversion might be selected
26948                   (ie, private A->B (better) but public B->A (worse),
26949                   inside A, A->B applies, but outside it, B->A will
26950                   apply).
26951
26952                 * On top of that (ie, even if the above is solved),
26953                   conversions in a cache need to be abstract.  Ie, `To
26954                   convert from an Int to a Short use an OpcodeCast', not
26955                   `To convert from an Int to a Short use the OpcodeCast on
26956                   the variable 5' (which is what this patch was doing).
26957
26958 2001-09-28  Ravi Pratap  <ravi@ximian.com>
26959
26960         * expression.cs (Invocation::ConversionExists): Re-write to use
26961         the conversion cache
26962
26963         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
26964         cache all conversions done, not just user-defined ones.
26965
26966         (Invocation::BetterConversion): The real culprit. Use ConversionExists
26967         to determine if a conversion exists instead of acutually trying to 
26968         perform the conversion. It's faster too.
26969
26970         (Expression::ConvertExplicit): Modify to use ConversionExists to check
26971         and only then attempt the implicit conversion.
26972
26973 2001-09-28  Ravi Pratap  <ravi@ximian.com>
26974
26975         * expression.cs (ConvertImplicit): Use a cache for conversions
26976         already found. Check level of recursion and bail out if necessary.
26977
26978 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
26979
26980         * typemanager.cs (string_concat_string_string, string_concat_object_object):
26981         Export standard methods that we expect for string operations.
26982
26983         * statement.cs (Block::UsageWarning): Track usage of variables and
26984         report the errors for not used variables.
26985
26986         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
26987         operator. 
26988
26989 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
26990
26991         * codegen.cs: remove unnneded code 
26992
26993         * expression.cs: Removed BuiltinTypeAccess class
26994
26995         Fix the order in which implicit conversions are
26996         done.  
26997
26998         The previous fixed dropped support for boxed conversions (adding a
26999         test to the test suite now)
27000
27001         (UserImplicitCast::CanConvert): Remove test for source being null,
27002         that code is broken.  We should not feed a null to begin with, if
27003         we do, then we should track the bug where the problem originates
27004         and not try to cover it up here.
27005
27006         Return a resolved expression of type UserImplicitCast on success
27007         rather than true/false.  Ravi: this is what I was talking about,
27008         the pattern is to use a static method as a "constructor" for
27009         objects. 
27010
27011         Also, do not create arguments until the very last minute,
27012         otherwise we always create the arguments even for lookups that
27013         will never be performed. 
27014
27015         (UserImplicitCast::Resolve): Eliminate, objects of type
27016         UserImplicitCast are born in a fully resolved state. 
27017
27018         * typemanager.cs (InitCoreTypes): Init also value_type
27019         (System.ValueType). 
27020
27021         * expression.cs (Cast::Resolve): First resolve the child expression.
27022
27023         (LValue): Add new method AddressOf to be used by
27024         the `&' operator.  
27025
27026         Change the argument of Store to take an EmitContext instead of an
27027         ILGenerator, because things like FieldExpr need to be able to call
27028         their children expression to generate the instance code. 
27029
27030         (Expression::Error, Expression::Warning): Sugar functions for
27031         reporting errors.
27032
27033         (Expression::MemberLookup): Accept a TypeContainer instead of a
27034         Report as the first argument.
27035
27036         (Expression::ResolvePrimary): Killed.  I still want to improve
27037         this as currently the code is just not right.
27038
27039         (Expression::ResolveMemberAccess): Simplify, but it is still
27040         wrong. 
27041
27042         (Unary::Resolve): Catch errors in AddressOf operators.
27043
27044         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
27045         index to a byte for the short-version, or the compiler will choose
27046         the wrong Emit call, which generates the wrong data.
27047
27048         (ParameterReference::Emit, ::Store): same.
27049
27050         (FieldExpr::AddressOf): Implement.
27051
27052         * typemanager.cs: TypeManager: made public variable instead of
27053         property.
27054
27055         * driver.cs: document --fatal.
27056
27057         * report.cs (ErrorMessage, WarningMessage): new names for the old
27058         Error and Warning classes.
27059
27060         * cs-parser.jay (member_access): Turn built-in access to types
27061         into a normal simplename
27062
27063 2001-09-27  Ravi Pratap  <ravi@ximian.com>
27064
27065         * expression.cs (Invocation::BetterConversion): Fix to cope
27066         with q being null, since this was introducing a bug.
27067
27068         * expression.cs (ConvertImplicit): Do built-in conversions first.
27069
27070 2001-09-27  Ravi Pratap  <ravi@ximian.com>
27071
27072         * expression.cs (UserImplicitCast::Resolve): Fix bug.
27073
27074 2001-09-27  Ravi Pratap  <ravi@ximian.com>
27075
27076         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
27077         I had introduced long ago (what's new ?).
27078
27079         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
27080         the work of all the checking. 
27081         (ConvertImplicit): Call CanConvert and only then create object if necessary.
27082         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
27083
27084         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
27085         that is the right way. 
27086
27087         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
27088         overloading resolution. Use everywhere instead of cutting and pasting code.
27089
27090         (Binary::ResolveOperator): Use MakeUnionSet.
27091
27092         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
27093         we have to convert to bool types. Not complete yet.
27094
27095 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
27096
27097         * typemanager.cs (TypeManager::CSharpName): support ushort.
27098
27099         * expression.cs (Expression::TryImplicitIntConversion): Attempts
27100         to provide an expression that performsn an implicit constant int
27101         conversion (section 6.1.6).
27102         (Expression::ConvertImplicitRequired): Reworked to include
27103         implicit constant expression conversions.
27104
27105         (Expression::ConvertNumericExplicit): Finished.
27106
27107         (Invocation::Emit): If InstanceExpression is null, then it means
27108         that we perform a call on this.
27109
27110 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
27111
27112         * expression.cs (Unary::Emit): Remove some dead code.
27113         (Probe): Implement Resolve and Emit for `is'.
27114         (Expression::ConvertImplicitRequired): Attempt to do constant
27115         expression conversions here.  Maybe should be moved to
27116         ConvertImplicit, but I am not sure.
27117         (Expression::ImplicitLongConstantConversionPossible,
27118         Expression::ImplicitIntConstantConversionPossible): New functions
27119         that tell whether is it possible to apply an implicit constant
27120         expression conversion.
27121
27122         (ConvertNumericExplicit): Started work on explicit numeric
27123         conversions.
27124
27125         * cs-parser.jay: Update operator constants.
27126
27127         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
27128         (Parameters::GetSignature): Hook up VerifyArgs here.
27129         (Parameters::VerifyArgs): Verifies that no two arguments have the
27130         same name. 
27131
27132         * class.cs (Operator): Update the operator names to reflect the
27133         ones that the spec expects (as we are just stringizing the
27134         operator names).
27135
27136         * expression.cs (Unary::ResolveOperator): Fix bug: Use
27137         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
27138         previous usage did only work for our methods.
27139         (Expression::ConvertImplicit): Handle decimal implicit numeric
27140         conversions as well.
27141         (Expression::InternalTypeConstructor): Used to invoke constructors
27142         on internal types for default promotions.
27143
27144         (Unary::Emit): Implement special handling for the pre/post
27145         increment/decrement for overloaded operators, as they need to have
27146         the same semantics as the other operators.
27147
27148         (Binary::ResolveOperator): ditto.
27149         (Invocation::ConversionExists): ditto.
27150         (UserImplicitCast::Resolve): ditto.
27151
27152 2001-09-26  Ravi Pratap  <ravi@ximian.com>
27153
27154         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
27155         operator, return after emitting body. Regression tests pass again !
27156
27157         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
27158         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
27159         (Invocation::OverloadResolve): Ditto.
27160         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
27161
27162         * everywhere : update calls to the above methods accordingly.
27163
27164 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
27165
27166         * assign.cs (Assign): Make it inherit from ExpressionStatement.
27167
27168         * expression.cs (ExpressionStatement): New base class used for
27169         expressions that can appear in statements, so that we can provide
27170         an alternate path to generate expression that do not leave a value
27171         on the stack.
27172
27173         (Expression::Emit, and all the derivatives): We no longer return
27174         whether a value is left on the stack or not.  Every expression
27175         after being emitted leaves a single value on the stack.
27176
27177         * codegen.cs (EmitContext::EmitStatementExpression): Use the
27178         facilties of ExpressionStatement if possible.
27179
27180         * cs-parser.jay: Update statement_expression.
27181
27182 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
27183
27184         * driver.cs: Change the wording of message
27185
27186 2001-09-25  Ravi Pratap  <ravi@ximian.com>
27187
27188         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
27189         the type of the expression to the return type of the method if
27190         we have an overloaded operator match ! The regression tests pass again !
27191         (Unary::ResolveOperator): Ditto.
27192
27193         * expression.cs (Invocation::ConversionExists): Correct the member lookup
27194         to find "op_Implicit", not "implicit" ;-)
27195         (UserImplicitCast): New class to take care of user-defined implicit conversions.
27196         (ConvertImplicit, ForceConversion): Take TypeContainer argument
27197
27198         * everywhere : Correct calls to the above accordingly.
27199
27200         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
27201         (ConvertImplicit): Do user-defined conversion if it exists.
27202
27203 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
27204
27205         * assign.cs: track location.
27206         (Resolve): Use implicit conversions on assignment.
27207
27208         * literal.cs: Oops.  Not good, Emit of short access values should
27209         pass (Bytes) or the wrong argument will be selected.
27210
27211         * expression.cs (Unary::Emit): Emit code for -expr.
27212
27213         (Unary::ResolveOperator): Handle `Substract' for non-constants
27214         (substract from zero from the non-constants).
27215         Deal with Doubles as well. 
27216
27217         (Expression::ConvertImplicitRequired): New routine that reports an
27218         error if no implicit conversion exists. 
27219
27220         (Invocation::OverloadResolve): Store the converted implicit
27221         expressions if we make them
27222
27223 2001-09-24  Ravi Pratap  <ravi@ximian.com>
27224
27225         * class.cs (ConstructorInitializer): Take a Location argument.
27226         (ConstructorBaseInitializer): Same here.
27227         (ConstructorThisInitializer): Same here.
27228
27229         * cs-parser.jay : Update all calls accordingly.
27230
27231         * expression.cs (Unary, Binary, New): Take location argument.
27232         Update accordingly everywhere.
27233
27234         * cs-parser.jay : Update all calls to the above to take a location
27235         argument.
27236
27237         * class.cs : Ditto.
27238
27239 2001-09-24  Ravi Pratap  <ravi@ximian.com>
27240
27241         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
27242         (Invocation::BetterConversion): Same here
27243         (Invocation::ConversionExists): Ditto.
27244
27245         (Invocation::ConversionExists): Implement.
27246
27247 2001-09-22  Ravi Pratap  <ravi@ximian.com>
27248
27249         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
27250         Also take an additional TypeContainer argument.
27251
27252         * All over : Pass in TypeContainer as argument to OverloadResolve.
27253
27254         * typemanager.cs (CSharpName): Update to check for the string type and return
27255         that too.
27256
27257         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
27258         a given method.
27259
27260 2001-09-21  Ravi Pratap  <ravi@ximian.com>
27261
27262         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
27263         (Invocation::BetterFunction): Implement.
27264         (Invocation::BetterConversion): Implement.
27265         (Invocation::ConversionExists): Skeleton, no implementation yet.
27266
27267         Okay, things work fine !
27268
27269 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
27270
27271         * typemanager.cs: declare and load enum_type, delegate_type and
27272         void_type. 
27273
27274         * expression.cs (Expression::Emit): Now emit returns a value that
27275         tells whether a value is left on the stack or not.  This strategy
27276         might be reveted tomorrow with a mechanism that would address
27277         multiple assignments.
27278         (Expression::report118): Utility routine to report mismatches on
27279         the ExprClass.
27280
27281         (Unary::Report23): Report impossible type/operator combination
27282         utility function.
27283
27284         (Unary::IsIncrementableNumber): Whether the type can be
27285         incremented or decremented with add.
27286         (Unary::ResolveOperator): Also allow enumerations to be bitwise
27287         complemented. 
27288         (Unary::ResolveOperator): Implement ++, !, ~,
27289
27290         (Invocation::Emit): Deal with new Emit convetion.
27291
27292         * All Expression derivatives: Updated their Emit method to return
27293         whether they leave values on the stack or not.
27294
27295         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
27296         stack for expressions that are statements. 
27297
27298 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
27299
27300         * expression.cs (LValue): New interface.  Must be implemented by
27301         LValue objects.
27302         (LocalVariableReference, ParameterReference, FieldExpr): Implement
27303         LValue interface.
27304
27305         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
27306         interface for generating code, simplifies the code.
27307
27308 2001-09-20  Ravi Pratap  <ravi@ximian.com>
27309
27310         * expression.cs (everywhere): Comment out return statements in ::Resolve
27311         methods to avoid the warnings.
27312
27313 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
27314
27315         * driver.cs (parse): Report error 2001 if we can not open the
27316         source file.
27317
27318         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
27319         not resolve it.
27320
27321         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
27322         object. 
27323
27324         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
27325         otherwise nested blocks end up with the same index.
27326
27327         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
27328
27329         * expression.cs:  Instead of having FIXMEs in the Resolve
27330         functions, throw exceptions so it is obvious that we are facing a
27331         bug. 
27332
27333         * cs-parser.jay (invocation_expression): Pass Location information.
27334
27335         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
27336         Use a basename for those routines because .NET does not like paths
27337         on them. 
27338
27339         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
27340         already defined.
27341
27342 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
27343
27344         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
27345         are loading the correct data types (throws an exception if not).
27346         (TypeManager::InitCoreTypes): Use CoreLookupType
27347
27348         * expression.cs (Unary::ResolveOperator): return the child
27349         expression for expressions which are just +expr.
27350         (Unary::ResolveOperator): Return negative literals for -LITERAL
27351         expressions (otherwise they are Unary {Literal}).
27352         (Invocation::Badness): Take into account `Implicit constant
27353         expression conversions'.
27354
27355         * literal.cs (LongLiteral): Implement long literal class.
27356         (IntLiteral): export the `Value' of the intliteral. 
27357
27358 2001-09-19  Ravi Pratap  <ravi@ximian.com>
27359
27360         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
27361
27362         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
27363         instead of 'Operator'
27364
27365         * expression.cs (Binary::ResolveOperator): Update accordingly.
27366         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
27367         and 'Minus'
27368
27369         * cs-parser.jay (unary_expression): Update to use the new names.
27370
27371         * gen-treedump.cs (GetUnary): Same here.
27372
27373         * expression.cs (Unary::Resolve): Implement.
27374         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
27375         operators are found instead of making noise ;-)
27376         (Unary::ResolveOperator): New method to do precisely the same thing which
27377         Binary::ResolveOperator does for Binary expressions.
27378         (Unary.method, .Arguments): Add.
27379         (Unary::OperName): Implement.   
27380         (Unary::ForceConversion): Copy and Paste !
27381
27382         * class.cs (Operator::Define): Fix a small bug for the case when we have 
27383         a unary operator.
27384
27385         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
27386         for the inbuilt operators. Only overloading works for now ;-)
27387
27388 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
27389
27390         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
27391         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
27392
27393         * expression.cs (This::Emit): Implement. 
27394         (This::Resolve): Implement.
27395         (TypeOf:Resolve): Implement.
27396         (Expression::ResolveSimpleName): Add an implicit this to instance
27397         field references. 
27398         (MemberAccess::Resolve): Deal with Parameters and Fields. 
27399         Bind instance variable to Field expressions.
27400         (FieldExpr::Instance): New field used to track the expression that
27401         represents the object instance.
27402         (FieldExpr::Resolve): Track potential errors from MemberLookup not
27403         binding 
27404         (FieldExpr::Emit): Implement.
27405
27406         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
27407         the last instruction contains a return opcode to avoid generating
27408         the last `ret' instruction (this generates correct code, and it is
27409         nice to pass the peverify output).
27410
27411         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
27412         initializer for static and instance variables.
27413         (Constructor::Emit): Allow initializer to be null in the case of
27414         static constructors.  Only emit initializer for instance
27415         constructors. 
27416
27417         (TypeContainer::FindMembers): Return a null array if there are no
27418         matches.
27419
27420         Also fix the code for the MemberTypes.Method branch, as it was not
27421         scanning that for operators (or tried to access null variables before).
27422
27423         * assign.cs (Assign::Emit): Handle instance and static fields. 
27424
27425         * TODO: Updated.
27426
27427         * driver.cs: Stop compilation if there are parse errors.
27428
27429         * cs-parser.jay (constructor_declaration): Provide default base
27430         initializer for non-static constructors.
27431         (constructor_declarator): Do not provide a default base
27432         initializers if none was specified.
27433         Catch the fact that constructors should not have parameters.
27434
27435         * class.cs: Do not emit parent class initializers for static
27436         constructors, that should be flagged as an error.
27437
27438 2001-09-18  Ravi Pratap  <ravi@ximian.com>
27439
27440         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
27441         Move back code into TypeContainer::Populate.
27442
27443 2001-09-18  Ravi Pratap  <ravi@ximian.com>
27444
27445         * class.cs (TypeContainer::AddConstructor): Fix the check to
27446         compare against Name, not Basename. 
27447         (Operator::OpType): Change Plus and Minus to Add and Subtract.
27448
27449         * cs-parser.jay : Update accordingly.
27450
27451         * class.cs (TypeContainer::FindMembers): For the case where we are searching
27452         for methods, don't forget to look into the operators too.
27453         (RegisterMethodBuilder): Helper method to take care of this for
27454         methods, constructors and operators.
27455         (Operator::Define): Completely revamp.
27456         (Operator.OperatorMethod, MethodName): New fields.
27457         (TypeContainer::Populate): Move the registering of builders into
27458         RegisterMethodBuilder.
27459         (Operator::Emit): Re-write.
27460
27461         * expression.cs (Binary::Emit): Comment out code path to emit method
27462         invocation stuff for the case when we have a user defined operator. I am
27463         just not able to get it right !
27464
27465 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
27466
27467         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
27468         argument. 
27469
27470         (Expression::MemberLookup): Provide a version that allows to
27471         specify the MemberTypes and BindingFlags. 
27472
27473         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
27474         so it was not fetching variable information from outer blocks.
27475
27476         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
27477         Beforefieldinit as it was buggy.
27478
27479         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
27480         that Ravi put here.  
27481
27482         * class.cs (Constructor::Emit): Only emit if block is not null.
27483         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
27484         deal with this by semantically definining it as if the user had
27485         done it.
27486
27487         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
27488         constructors as we now "emit" them at a higher level.
27489
27490         (TypeContainer::DefineDefaultConstructor): Used to define the
27491         default constructors if none was provided.
27492
27493         (ConstructorInitializer): Add methods Resolve and Emit. 
27494
27495         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
27496
27497 2001-09-17  Ravi Pratap  <ravi@ximian.com>
27498
27499         * class.cs (TypeContainer::EmitDefaultConstructor): Register
27500         the default constructor builder with our hashtable for methodbuilders
27501         to methodcores.
27502
27503         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
27504         and argument_count is 0 in which case we have a match.
27505         (Binary::ResolveOperator): More null checking and miscellaneous coding
27506         style cleanup.
27507
27508 2001-09-17  Ravi Pratap  <ravi@ximian.com>
27509
27510         * rootcontext.cs (IsNameSpace): Compare against null.
27511
27512         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
27513
27514         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
27515         and Unary::Operator.
27516
27517         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
27518         accordingly.
27519
27520         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
27521         we have overloaded operators.
27522         (Binary::ResolveOperator): Implement the part which does the operator overload
27523         resolution.
27524
27525         * class.cs (Operator::Emit): Implement.
27526         (TypeContainer::Emit): Emit the operators we have too.
27527
27528         * expression.cs (Binary::Emit): Update to emit the appropriate code for
27529         the case when we have a user-defined operator.
27530
27531 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
27532
27533         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
27534
27535 2001-09-16  Ravi Pratap  <ravi@ximian.com>
27536
27537         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
27538         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
27539         (Constructor::Emit): Implement.
27540         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
27541         if we have no work to do. 
27542         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
27543         Emit method.
27544
27545         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
27546         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
27547
27548         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
27549         of parent.parent.
27550
27551 2001-09-15  Ravi Pratap  <ravi@ximian.com>
27552
27553         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
27554         in the source.
27555         (Tree::RecordNamespace): Method to do what the name says ;-)
27556         (Tree::Namespaces): Property to get at the namespaces hashtable.
27557
27558         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
27559         keep track.
27560
27561         * rootcontext.cs (IsNamespace): Fixed it :-)
27562
27563 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
27564
27565         * class.cs (TypeContainer::FindMembers): Add support for
27566         constructors. 
27567         (MethodCore): New class that encapsulates both the shared aspects
27568         of a Constructor and a Method.  
27569         (Method, Constructor): Factored pieces into MethodCore.
27570
27571         * driver.cs: Added --fatal which makes errors throw exceptions.
27572         Load System assembly as well as part of the standard library.
27573
27574         * report.cs: Allow throwing exceptions on errors for debugging.
27575
27576         * modifiers.cs: Do not use `parent', instead use the real type
27577         container to evaluate permission settings.
27578
27579         * class.cs: Put Ravi's patch back in.  He is right, and we will
27580         have to cope with the
27581
27582 2001-09-14  Ravi Pratap  <ravi@ximian.com>
27583
27584         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
27585         FamORAssem, not FamANDAssem.
27586
27587 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
27588
27589         * driver.cs: Added --parse option that only parses its input files
27590         and terminates.
27591
27592         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
27593         incorrect.  IsTopLevel is not used to tell whether an object is
27594         root_types or not (that can be achieved by testing this ==
27595         root_types).  But to see if this is a top-level *class* (not
27596         necessarly our "toplevel" container). 
27597
27598 2001-09-14  Ravi Pratap  <ravi@ximian.com>
27599
27600         * enum.cs (Enum::Define): Modify to call the Lookup method on the
27601         parent instead of a direct call to GetType.
27602
27603 2001-09-14  Ravi Pratap  <ravi@ximian.com>
27604
27605         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
27606         Modifiers.TypeAttr. This should just be a call to that method.
27607
27608         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
27609         object so that we can determine if we are top-level or not.
27610
27611         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
27612         TypeContainer too.
27613
27614         * enum.cs (Enum::Define): Ditto.
27615
27616         * modifiers.cs (FieldAttr): Re-write.
27617
27618         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
27619         (TypeContainer::HaveStaticConstructor): New property to provide access
27620         to precisely that info.
27621
27622         * modifiers.cs (MethodAttr): Re-write.
27623         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
27624
27625         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
27626         of top-level types as claimed.
27627
27628 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
27629
27630         * expression.cs (MemberLookup): Fruitless attempt to lookup
27631         constructors.  Maybe I need to emit default constructors?  That
27632         might be it (currently .NET emits this for me automatically).
27633         (Invocation::OverloadResolve): Cope with Arguments == null.
27634         (Invocation::EmitArguments): new function, shared by the new
27635         constructor and us.
27636         (Invocation::Emit): Handle static and instance methods.  Emit
27637         proper call instruction for virtual or non-virtual invocations.
27638         (New::Emit): Implement.
27639         (New::Resolve): Implement.
27640         (MemberAccess:Resolve): Implement.
27641         (MethodGroupExpr::InstanceExpression): used conforming to the spec
27642         to track instances.
27643         (FieldExpr::Resolve): Set type.
27644
27645         * support.cs: Handle empty arguments.
27646                 
27647         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
27648         SimpleLookup): Auxiliary routines to help parse a qualifier
27649         identifier.  
27650
27651         Update qualifier_identifier rule.
27652
27653         * codegen.cs: Removed debugging messages.
27654
27655         * class.cs: Make this a global thing, this acts just as a "key" to
27656         objects that we might have around.
27657
27658         (Populate): Only initialize method_builders_to_methods once.
27659
27660         * expression.cs (PropertyExpr): Initialize type from the
27661         PropertyType. 
27662
27663         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
27664         Resolve pattern.  Attempt to implicitly convert value to boolean.
27665         Emit code.
27666
27667         * expression.cs: Set the type for the int32/int32 argument case.
27668         (Binary::ResolveOperator): Set the return type to boolean for
27669         comparission operators
27670
27671         * typemanager.cs: Remove debugging print code.
27672
27673         (Invocation::Resolve): resolve type.
27674
27675         * class.cs: Allocate a MemberInfo of the correct size, as the code
27676         elsewhere depends on the test to reflect the correct contents.
27677
27678         (Method::) Keep track of parameters, due to System.Reflection holes
27679
27680         (TypeContainer::Populate): Keep track of MethodBuilders to Method
27681         mapping here.
27682
27683         (TypeContainer::FindMembers): Use ArrayList and then copy an array
27684         of the exact size and return that.
27685
27686         (Class::LookupMethodByBuilder): New function that maps
27687         MethodBuilders to its methods.  Required to locate the information
27688         on methods because System.Reflection bit us again.
27689
27690         * support.cs: New file, contains an interface ParameterData and
27691         two implementations: ReflectionParameters and InternalParameters
27692         used to access Parameter information.  We will need to grow this
27693         as required.
27694
27695         * expression.cs (Invocation::GetParameterData): implement a cache
27696         and a wrapper around the ParameterData creation for methods. 
27697         (Invocation::OverloadResolve): Use new code.
27698
27699 2001-09-13  Ravi Pratap  <ravi@ximian.com>
27700
27701         * class.cs (TypeContainer::EmitField): Remove and move into 
27702         (Field::Define): here and modify accordingly.
27703         (Field.FieldBuilder): New member.
27704         (TypeContainer::Populate): Update accordingly.
27705         (TypeContainer::FindMembers): Implement.
27706
27707 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
27708
27709         * statement.cs: (VariableInfo::VariableType): New field to be
27710         initialized with the full type once it is resolved. 
27711
27712 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
27713
27714         * parameter.cs (GetParameterInfo): Use a type cache to compute
27715         things only once, and to reuse this information
27716
27717         * expression.cs (LocalVariableReference::Emit): Implement.
27718         (OpcodeCast::Emit): fix.
27719
27720         (ParameterReference::Resolve): Implement.
27721         (ParameterReference::Emit): Implement.
27722
27723         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
27724         that are expressions need to stay as Expressions.
27725
27726         * typemanager.cs (CSharpName): Returns the C# name of a type if
27727         possible. 
27728
27729         * expression.cs (Expression::ConvertImplicit): New function that
27730         implements implicit type conversions.
27731
27732         (Expression::ImplicitReferenceConversion): Implements implicit
27733         reference conversions.
27734
27735         (EmptyCast): New type for transparent casts.
27736
27737         (OpcodeCast): New type for casts of types that are performed with
27738         a sequence of bytecodes.
27739
27740         (BoxedCast): New type used for casting value types into reference
27741         types.  Emits a box opcode.
27742
27743         (Binary::DoNumericPromotions): Implements numeric promotions of
27744         and computation of the Binary::Type.
27745
27746         (Binary::EmitBranchable): Optimization.
27747
27748         (Binary::Emit): Implement code emission for expressions.
27749
27750         * typemanager.cs (TypeManager): Added two new core types: sbyte
27751         and byte.
27752
27753 2001-09-12  Ravi Pratap  <ravi@ximian.com>
27754
27755         * class.cs (TypeContainer::FindMembers): Method which does exactly
27756         what Type.FindMembers does, only we don't have to use reflection. No
27757         implementation yet.
27758
27759         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
27760         typecontainer objects as we need to get at them.
27761         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
27762
27763         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
27764         typecontainer object.
27765
27766         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
27767         of just a Report object.
27768
27769 2001-09-11  Ravi Pratap  <ravi@ximian.com>
27770
27771         * class.cs (Event::Define): Go back to using the prefixes "add_" and
27772         "remove_"
27773         (TypeContainer::Populate): Now define the delegates of the type too.
27774         (TypeContainer.Delegates): Property to access the list of delegates defined
27775         in the type.
27776
27777         * delegates.cs (Delegate::Define): Implement partially.
27778
27779         * modifiers.cs (TypeAttr): Handle more flags.
27780
27781 2001-09-11  Ravi Pratap  <ravi@ximian.com>
27782
27783         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
27784         and not <=
27785         (Operator::Define): Re-write logic to get types by using the LookupType method
27786         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
27787         (Indexer::Define): Ditto.
27788         (Event::Define): Ditto.
27789         (Property::Define): Ditto.
27790
27791 2001-09-10  Ravi Pratap  <ravi@ximian.com>
27792
27793         * class.cs (TypeContainer::Populate): Now define operators too. 
27794         (TypeContainer.Operators): New property to access the list of operators
27795         in a type.
27796         (Operator.OperatorMethodBuilder): New member to hold the method builder
27797         for the operator we are defining.
27798         (Operator::Define): Implement.
27799
27800 2001-09-10  Ravi Pratap  <ravi@ximian.com>
27801
27802         * class.cs (Event::Define): Make the prefixes of the accessor methods
27803         addOn_ and removeOn_ 
27804
27805         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
27806         of the location being passed in too. Ideally, this should go later since all
27807         error reporting should be done through the Report object.
27808
27809         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
27810         (Populate): Iterate thru the indexers we have and define them too.
27811         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
27812         for the get and set accessors.
27813         (Indexer::Define): Implement.
27814
27815 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
27816
27817         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
27818         my previous implementation, did not work.
27819
27820         * typemanager.cs: Add a couple of missing types (the longs).
27821
27822         * literal.cs: Use TypeManager.bool_type instead of getting it.
27823
27824         * expression.cs (EventExpr): New kind of expressions.
27825         (Expressio::ExprClassFromMemberInfo): finish
27826
27827 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
27828
27829         * assign.cs: Emit stores to static fields differently.
27830
27831 2001-09-08  Ravi Pratap  <ravi@ximian.com>
27832
27833         * Merge in changes and adjust code to tackle conflicts. Backed out my
27834         code in Assign::Resolve ;-) 
27835
27836 2001-09-08  Ravi Pratap  <ravi@ximian.com>
27837
27838         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
27839         instead Report.Error and also pass in the location.
27840         (CSharpParser::Lexer): New readonly property to return the reference
27841         to the Tokenizer object.
27842         (declare_local_variables): Use Report.Error with location instead of plain 
27843         old error.
27844         (CheckDef): Ditto.
27845
27846         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
27847         (Operator.CheckBinaryOperator): Ditto.
27848
27849         * cs-parser.jay (operator_declarator): Update accordingly.
27850
27851         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
27852         (CheckBinaryOperator): Same here.
27853
27854         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
27855         on the name without any prefixes of namespace names etc. This is because we
27856         already might have something already fully qualified like 
27857         'System.Console.WriteLine'
27858
27859         * assign.cs (Resolve): Begin implementation. Stuck ;-)
27860
27861 2001-09-07  Ravi Pratap  <ravi@ximian.com>
27862
27863         * cs-tokenizer.cs (location): Return a string which also contains
27864         the file name.
27865
27866         * expression.cs (ElementAccess): New class for expressions of the
27867         type 'element access.'
27868         (BaseAccess): New class for expressions of the type 'base access.'
27869         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
27870         respectively.
27871
27872         * cs-parser.jay (element_access): Implement action.
27873         (base_access): Implement actions.
27874         (checked_expression, unchecked_expression): Implement.
27875
27876         * cs-parser.jay (local_variable_type): Correct and implement.
27877         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
27878
27879         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
27880
27881         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
27882         name and the specifiers.
27883
27884         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
27885
27886         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
27887         making them all public ;-)
27888
27889         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
27890         class anyways.
27891
27892 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
27893
27894         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
27895         PropertyExprs.
27896         (FieldExpr, PropertyExprs): New resolved expressions.
27897         (SimpleName::MemberStaticCheck): Perform static checks for access
27898         to non-static fields on static methods. Maybe this should be
27899         generalized for MemberAccesses. 
27900         (SimpleName::ResolveSimpleName): More work on simple name
27901         resolution. 
27902
27903         * cs-parser.jay (primary_expression/qualified_identifier): track
27904         the parameter index.
27905
27906         * codegen.cs (CodeGen::Save): Catch save exception, report error.
27907         (EmitContext::EmitBoolExpression): Chain to expression generation
27908         instead of temporary hack.
27909         (::EmitStatementExpression): Put generic expression code generation.
27910
27911         * assign.cs (Assign::Emit): Implement variable assignments to
27912         local variables, parameters and fields.
27913
27914 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
27915
27916         * statement.cs (Block::GetVariableInfo): New method, returns the
27917         VariableInfo for a variable name in a block.
27918         (Block::GetVariableType): Implement in terms of GetVariableInfo
27919
27920         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
27921         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
27922
27923 2001-09-06  Ravi Pratap  <ravi@ximian.com>
27924
27925         * cs-parser.jay (operator_declaration): Continue on my quest : update
27926         to take attributes argument.
27927         (event_declaration): Ditto.
27928         (enum_declaration): Ditto.
27929         (indexer_declaration): Ditto.
27930
27931         * class.cs (Operator::Operator): Update constructor accordingly.
27932         (Event::Event): Ditto.
27933
27934         * delegate.cs (Delegate::Delegate): Same here.
27935
27936         * enum.cs (Enum::Enum): Same here.
27937
27938 2001-09-05  Ravi Pratap  <ravi@ximian.com>
27939
27940         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
27941
27942         * ../tests/cs0658.cs : New file to demonstrate error 0658.
27943
27944         * attribute.cs (Attributes): New class to encapsulate all attributes which were
27945         being passed around as an arraylist.
27946         (Attributes::AddAttribute): Method to add attribute sections.
27947
27948         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
27949         (struct_declaration): Update accordingly.
27950         (constant_declaration): Update.
27951         (field_declaration): Update.
27952         (method_header): Update.
27953         (fixed_parameter): Update.
27954         (parameter_array): Ditto.
27955         (property_declaration): Ditto.
27956         (destructor_declaration): Ditto.
27957
27958         * class.cs (Struct::Struct): Update constructors accordingly.
27959         (Class::Class): Ditto.
27960         (Field::Field): Ditto.
27961         (Method::Method): Ditto.
27962         (Property::Property): Ditto.
27963         (TypeContainer::OptAttribute): update property's return type.
27964
27965         * interface.cs (Interface.opt_attributes): New member.
27966         (Interface::Interface): Update to take the extra Attributes argument.
27967
27968         * parameter.cs (Parameter::Parameter): Ditto.
27969
27970         * constant.cs (Constant::Constant): Ditto.
27971
27972         * interface.cs (InterfaceMemberBase): New OptAttributes field.
27973         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
27974         the attributes as a parameter.
27975         (InterfaceProperty): Update constructor call.
27976         (InterfaceEvent): Ditto.
27977         (InterfaceMethod): Ditto.
27978         (InterfaceIndexer): Ditto.
27979
27980         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
27981         pass the attributes too.
27982         (interface_event_declaration): Ditto.
27983         (interface_property_declaration): Ditto.
27984         (interface_method_declaration): Ditto.
27985         (interface_declaration): Ditto.
27986
27987 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
27988
27989         * class.cs (Method::Define): Track the "static Main" definition to
27990         create an entry point. 
27991
27992         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
27993         EntryPoint if we find it. 
27994
27995         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
27996         (EmitContext::ig): Make this variable public.
27997
27998         * driver.cs: Make the default output file be the first file name
27999         with the .exe extension.  
28000
28001         Detect empty compilations
28002
28003         Handle various kinds of output targets.  Handle --target and
28004         rename -t to --dumper.
28005
28006         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
28007         methods inherited from Expression return now an Expression.  This
28008         will is used during the tree rewriting as we resolve them during
28009         semantic analysis.
28010
28011         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
28012         the spec.  Missing entirely is the information about
28013         accessability of elements of it.
28014
28015         (Expression::ExprClassFromMemberInfo): New constructor for
28016         Expressions that creates a fully initialized Expression based on
28017         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
28018         a Type.
28019
28020         (Invocation::Resolve): Begin implementing resolution of invocations.
28021
28022         * literal.cs (StringLiteral):  Implement Emit.
28023
28024 2001-09-05  Ravi Pratap  <ravi@ximian.com>
28025
28026         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
28027         member.
28028
28029 2001-09-04  Ravi Pratap  <ravi@ximian.com>
28030
28031         * cs-parser.jay (attribute_arguments): Implement actions.
28032         (attribute): Fix bug in production. Implement action.
28033         (attribute_list): Implement.
28034         (attribute_target): Implement.
28035         (attribute_target_specifier, opt_target_specifier): Implement
28036         (CheckAttributeTarget): New method to check if the attribute target
28037         is valid.
28038         (attribute_section): Implement.
28039         (opt_attributes): Implement.
28040
28041         * attribute.cs : New file to handle attributes.
28042         (Attribute): Class to hold attribute info.
28043
28044         * cs-parser.jay (opt_attribute_target_specifier): Remove production
28045         (attribute_section): Modify production to use 2 different rules to 
28046         achieve the same thing. 1 s/r conflict down !
28047         Clean out commented, useless, non-reducing dimension_separator rules.
28048
28049         * class.cs (TypeContainer.attributes): New member to hold list
28050         of attributes for a type.
28051         (Struct::Struct): Modify to take one more argument, the attribute list.
28052         (Class::Class): Ditto.
28053         (Field::Field): Ditto.
28054         (Method::Method): Ditto.
28055         (Property::Property): Ditto.
28056
28057         * cs-parser.jay (struct_declaration): Update constructor call to
28058         pass in the attributes too.
28059         (class_declaration): Ditto.
28060         (constant_declaration): Ditto.
28061         (field_declaration): Ditto.
28062         (method_header): Ditto.
28063         (fixed_parameter): Ditto.
28064         (parameter_array): Ditto.
28065         (property_declaration): Ditto.
28066
28067         * constant.cs (Constant::Constant): Update constructor similarly.
28068         Use System.Collections.
28069
28070         * parameter.cs (Parameter::Parameter): Update as above.
28071
28072 2001-09-02  Ravi Pratap  <ravi@ximian.com>
28073
28074         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
28075         (TypeContainer.delegates): New member to hold list of delegates.
28076
28077         * cs-parser.jay (delegate_declaration): Implement the action correctly 
28078         this time as I seem to be on crack ;-)
28079
28080 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
28081
28082         * rootcontext.cs (RootContext::IsNamespace): new function, used to
28083         tell whether an identifier represents a namespace.
28084
28085         * expression.cs (NamespaceExpr): A namespace expression, used only
28086         temporarly during expression resolution.
28087         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
28088         utility functions to resolve names on expressions.
28089
28090 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
28091
28092         * codegen.cs: Add hook for StatementExpressions. 
28093
28094         * class.cs: Fix inverted test for static flag in methods.
28095
28096 2001-09-02  Ravi Pratap  <ravi@ximian.com>
28097
28098         * class.cs (Operator::CheckUnaryOperator): Correct error number used
28099         to make it coincide with MS' number.
28100         (Operator::CheckBinaryOperator): Ditto.
28101
28102         * ../errors/errors.txt : Remove error numbers added earlier.
28103
28104         * ../errors/cs1019.cs : Test case for error # 1019
28105
28106         * ../errros/cs1020.cs : Test case for error # 1020
28107
28108         * cs-parser.jay : Clean out commented cruft.
28109         (dimension_separators, dimension_separator): Comment out. Ostensibly not
28110         used anywhere - non-reducing rule.
28111         (namespace_declarations): Non-reducing rule - comment out.
28112
28113         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
28114         with TypeContainer::AddEnum.
28115
28116         * delegate.cs : New file for delegate handling classes.
28117         (Delegate): Class for declaring delegates.
28118
28119         * makefile : Update.
28120
28121         * cs-parser.jay (delegate_declaration): Implement.
28122
28123 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
28124
28125         * class.cs (Event::Define): Implement.
28126         (Event.EventBuilder): New member.
28127
28128         * class.cs (TypeContainer::Populate): Update to define all enums and events
28129         we have.
28130         (Events): New property for the events arraylist we hold. Shouldn't we move to using
28131         readonly fields for all these cases ?
28132
28133 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
28134
28135         * class.cs (Property): Revamp to use the convention of making fields readonly.
28136         Accordingly modify code elsewhere.
28137
28138         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
28139         the Define method of the Property class.
28140
28141         * class.cs : Clean up applied patch and update references to variables etc. Fix 
28142         trivial bug.
28143         (TypeContainer::Populate): Update to define all the properties we have. Also
28144         define all enumerations.
28145
28146         * enum.cs (Define): Implement.
28147
28148 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
28149
28150         * cs-parser.jay (overloadable_operator): The semantic value is an
28151         enum of the Operator class.
28152         (operator_declarator): Implement actions.
28153         (operator_declaration): Implement.
28154
28155         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
28156         validity of definitions.
28157         (Operator::CheckBinaryOperator): Static method to check for binary operators
28158         (TypeContainer::AddOperator): New method to add an operator to a type.
28159
28160         * cs-parser.jay (indexer_declaration): Added line to actually call the
28161         AddIndexer method so it gets added ;-)
28162
28163         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
28164         already taken care of by the MS compiler ?  
28165
28166 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
28167
28168         * class.cs (Operator): New class for operator declarations.
28169         (Operator::OpType): Enum for the various operators.
28170
28171 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
28172
28173         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
28174         ostensibly handle this in semantic analysis.
28175
28176         * cs-parser.jay (general_catch_clause): Comment out
28177         (specific_catch_clauses, specific_catch_clause): Ditto.
28178         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
28179         (catch_args, opt_catch_args): New productions.
28180         (catch_clause): Rewrite to use the new productions above
28181         (catch_clauses): Modify accordingly.
28182         (opt_catch_clauses): New production to use in try_statement
28183         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
28184         and re-write the code in the actions to extract the specific and
28185         general catch clauses by being a little smart ;-)
28186
28187         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
28188         Hooray, try and catch statements parse fine !
28189
28190 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
28191
28192         * statement.cs (Block::GetVariableType): Fix logic to extract the type
28193         string from the hashtable of variables.
28194
28195         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
28196         I end up making that mistake ;-)
28197         (catch_clauses): Fixed gross error which made Key and Value of the 
28198         DictionaryEntry the same : $1 !!
28199
28200 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
28201
28202         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
28203
28204         * cs-parser.jay (event_declaration): Correct to remove the semicolon
28205         when the add and remove accessors are specified. 
28206
28207 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
28208
28209         * cs-parser.jay (IndexerDeclaration): New helper class to hold
28210         information about indexer_declarator.
28211         (indexer_declarator): Implement actions.
28212         (parsing_indexer): New local boolean used to keep track of whether
28213         we are parsing indexers or properties. This is necessary because 
28214         implicit_parameters come into picture even for the get accessor in the 
28215         case of an indexer.
28216         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
28217
28218         * class.cs (Indexer): New class for indexer declarations.
28219         (TypeContainer::AddIndexer): New method to add an indexer to a type.
28220         (TypeContainer::indexers): New member to hold list of indexers for the
28221         type.
28222
28223 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
28224
28225         * cs-parser.jay (add_accessor_declaration): Implement action.
28226         (remove_accessor_declaration): Implement action.
28227         (event_accessors_declaration): Implement
28228         (variable_declarators): swap statements for first rule - trivial.
28229
28230         * class.cs (Event): New class to hold information about event
28231         declarations.
28232         (TypeContainer::AddEvent): New method to add an event to a type
28233         (TypeContainer::events): New member to hold list of events.
28234
28235         * cs-parser.jay (event_declaration): Implement actions.
28236
28237 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
28238
28239         * cs-parser.jay (dim_separators): Implement. Make it a string
28240         concatenating all the commas together, just as they appear.
28241         (opt_dim_separators): Modify accordingly
28242         (rank_specifiers): Update accordingly. Basically do the same
28243         thing - instead, collect the brackets here.
28244         (opt_rank_sepcifiers): Modify accordingly.
28245         (array_type): Modify to actually return the complete type string
28246         instead of ignoring the rank_specifiers.
28247         (expression_list): Implement to collect the expressions
28248         (variable_initializer): Implement. We make it a list of expressions
28249         essentially so that we can handle the array_initializer case neatly too.
28250         (variable_initializer_list): Implement.
28251         (array_initializer): Make it a list of variable_initializers
28252         (opt_array_initializer): Modify accordingly.
28253
28254         * expression.cs (New::NType): Add enumeration to help us
28255         keep track of whether we have an object/delegate creation
28256         or an array creation.
28257         (New:NewType, New::Rank, New::Indices, New::Initializers): New
28258         members to hold data about array creation.
28259         (New:New): Modify to update NewType
28260         (New:New): New Overloaded contructor for the array creation
28261         case.
28262
28263         * cs-parser.jay (array_creation_expression): Implement to call
28264         the overloaded New constructor.
28265
28266 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
28267
28268         * class.cs (TypeContainer::Constructors): Return member
28269         constructors instead of returning null.
28270
28271 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
28272
28273         * typemanager.cs (InitCoreTypes): Initialize the various core
28274         types after we have populated the type manager with the user
28275         defined types (this distinction will be important later while
28276         compiling corlib.dll)
28277
28278         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
28279         on Expression Classification.  Now all expressions have a method
28280         `Resolve' and a method `Emit'.
28281
28282         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
28283         generation from working.     Also add some temporary debugging
28284         code. 
28285
28286 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
28287
28288         * codegen.cs: Lots of code generation pieces.  This is only the
28289         beginning, will continue tomorrow with more touches of polish.  We
28290         handle the fundamentals of if, while, do, for, return.  Others are
28291         trickier and I need to start working on invocations soon.
28292
28293         * gen-treedump.cs: Bug fix, use s.Increment here instead of
28294         s.InitStatement. 
28295
28296         * codegen.cs (EmitContext): New struct, used during code
28297         emission to keep a context.   Most of the code generation will be
28298         here. 
28299
28300         * cs-parser.jay: Add embedded blocks to the list of statements of
28301         this block.  So code generation proceeds in a top down fashion.
28302
28303 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
28304
28305         * statement.cs: Add support for multiple child blocks.
28306
28307 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
28308
28309         * codegen.cs (EmitCode): New function, will emit the code for a
28310         Block of code given a TypeContainer and its ILGenerator. 
28311
28312         * statement.cs (Block): Standard public readonly optimization.
28313         (Block::Block constructors): Link children. 
28314         (Block::Child): Child Linker.
28315         (Block::EmitVariables): Emits IL variable declarations.
28316
28317         * class.cs: Drop support for MethodGroups here, delay until
28318         Semantic Analysis.
28319         (Method::): Applied the same simplification that I did before, and
28320         move from Properties to public readonly fields.
28321         (Method::ParameterTypes): Returns the parameter types for the
28322         function, and implements a cache that will be useful later when I
28323         do error checking and the semantic analysis on the methods is
28324         performed.
28325         (Constructor::GetCallingConvention): Renamed from CallingConvetion
28326         and made a method, optional argument tells whether this is a class
28327         or a structure to apply the `has-this' bit.
28328         (Method::GetCallingConvention): Implement, returns the calling
28329         convention. 
28330         (Method::Define): Defines the type, a second pass is performed
28331         later to populate the methods.
28332
28333         (Constructor::ParameterTypes): implement a cache similar to the
28334         one on Method::ParameterTypes, useful later when we do semantic
28335         analysis. 
28336
28337         (TypeContainer::EmitMethod):  New method.  Emits methods.
28338
28339         * expression.cs: Removed MethodGroup class from here.
28340
28341         * parameter.cs (Parameters::GetCallingConvention): new method.
28342
28343 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
28344
28345         * class.cs (TypeContainer::Populate): Drop RootContext from the
28346         argument. 
28347
28348         (Constructor::CallingConvention): Returns the calling convention.
28349         (Constructor::ParameterTypes): Returns the constructor parameter
28350         types. 
28351
28352         (TypeContainer::AddConstructor): Keep track of default constructor
28353         and the default static constructor.
28354
28355         (Constructor::) Another class that starts using `public readonly'
28356         instead of properties. 
28357
28358         (Constructor::IsDefault): Whether this is a default constructor. 
28359
28360         (Field::) use readonly public fields instead of properties also.
28361
28362         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
28363         track of static constructors;  If none is used, turn on
28364         BeforeFieldInit in the TypeAttributes. 
28365
28366         * cs-parser.jay (opt_argument_list): now the return can be null
28367         for the cases where there are no arguments. 
28368
28369         (constructor_declarator): If there is no implicit `base' or
28370         `this', then invoke the default parent constructor. 
28371
28372         * modifiers.cs (MethodAttr): New static function maps a set of
28373         modifiers flags into a MethodAttributes enum
28374         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
28375         MethodAttr, TypeAttr to represent the various mappings where the
28376         modifiers are used.
28377         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
28378
28379 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
28380
28381         * parameter.cs (GetParameterInfo): Fix bug where there would be no
28382         method arguments.
28383
28384         * interface.cs (PopulateIndexer): Implemented the code generator
28385         for interface indexers.
28386
28387 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
28388
28389         * interface.cs (InterfaceMemberBase): Now we track the new status
28390         here.  
28391
28392         (PopulateProperty): Implement property population.  Woohoo!  Got
28393         Methods and Properties going today. 
28394
28395         Removed all the properties for interfaces, and replaced them with
28396         `public readonly' fields. 
28397
28398 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
28399
28400         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
28401         initialize their hashtables/arraylists only when they are needed
28402         instead of doing this always.
28403
28404         * parameter.cs: Handle refs and out parameters.
28405
28406         * cs-parser.jay: Use an ArrayList to construct the arguments
28407         instead of the ParameterCollection, and then cast that to a
28408         Parameter[] array.
28409
28410         * parameter.cs: Drop the use of ParameterCollection and use
28411         instead arrays of Parameters.
28412
28413         (GetParameterInfo): Use the Type, not the Name when resolving
28414         types. 
28415
28416 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
28417
28418         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
28419         and instead use public readonly fields.
28420
28421         * class.cs: Put back walking code for type containers.
28422
28423 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
28424
28425         * class.cs (MakeConstant): Code to define constants.
28426
28427         * rootcontext.cs (LookupType): New function.  Used to locate types 
28428
28429
28430 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
28431
28432         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
28433         this System.Reflection code is.  Kudos to Microsoft
28434
28435         * typemanager.cs: Implement a type cache and avoid loading all
28436         types at boot time.  Wrap in LookupType the internals.  This made
28437         the compiler so much faster.  Wow.  I rule!
28438
28439         * driver.cs: Make sure we always load mscorlib first (for
28440         debugging purposes, nothing really important).
28441
28442         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
28443         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
28444
28445         * rootcontext.cs: Lookup types on their namespace;  Lookup types
28446         on namespaces that have been imported using the `using' keyword.
28447
28448         * class.cs (TypeContainer::TypeAttr): Virtualize.
28449         (Class::TypeAttr): Return attributes suitable for this bad boy.
28450         (Struct::TypeAttr): ditto.
28451         Handle nested classes.
28452         (TypeContainer::) Remove all the type visiting code, it is now
28453         replaced with the rootcontext.cs code
28454
28455         * rootcontext.cs (GetClassBases): Added support for structs. 
28456
28457 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
28458
28459         * interface.cs, statement.cs, class.cs, parameter.cs,
28460         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
28461         Drop use of TypeRefs, and use strings instead.
28462
28463 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
28464
28465         * rootcontext.cs: 
28466
28467         * class.cs (Struct::Struct): set the SEALED flags after
28468         checking the modifiers.
28469         (TypeContainer::TypeAttr): new property, returns the
28470         TypeAttributes for a class.  
28471
28472         * cs-parser.jay (type_list): Oops, list production was creating a
28473         new list of base types.
28474
28475         * rootcontext.cs (StdLib): New property.
28476         (GetInterfaceTypeByName): returns an interface by type name, and
28477         encapsulates error handling here.
28478         (GetInterfaces): simplified.
28479         (ResolveTree): Encapsulated all the tree resolution here.
28480         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
28481         types. 
28482
28483         * driver.cs: Add support for --nostdlib, to avoid loading the
28484         default assemblies.
28485         (Main): Do not put tree resolution here. 
28486
28487         * rootcontext.cs: Beginning of the class resolution.
28488
28489 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
28490
28491         * rootcontext.cs: Provide better error reporting. 
28492
28493         * cs-parser.jay (interface_base): set our $$ to be interfaces.
28494
28495         * rootcontext.cs (CreateInterface): Handle the case where there
28496         are no parent interfaces.
28497
28498         (CloseTypes): Routine to flush types at the end.
28499         (CreateInterface): Track types.
28500         (GetInterfaces): Returns an array of Types from the list of
28501         defined interfaces.
28502
28503         * typemanager.c (AddUserType): Mechanism to track user types (puts
28504         the type on the global type hash, and allows us to close it at the
28505         end). 
28506
28507 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
28508
28509         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
28510         RecordInterface instead.
28511
28512         * cs-parser.jay: Updated to reflect changes above.
28513
28514         * decl.cs (Definition): Keep track of the TypeBuilder type that
28515         represents this type here.  Not sure we will use it in the long
28516         run, but wont hurt for now.
28517
28518         * driver.cs: Smaller changes to accomodate the new code.
28519
28520         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
28521         when done. 
28522
28523         * rootcontext.cs (CreateInterface):  New method, used to create
28524         the System.TypeBuilder type for interfaces.
28525         (ResolveInterfaces): new entry point to resolve the interface
28526         hierarchy. 
28527         (CodeGen): Property, used to keep track of the code generator.
28528
28529 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
28530
28531         * cs-parser.jay: Add a second production for delegate_declaration
28532         with `VOID'.
28533
28534         (enum_body): Put an opt_comma here instead of putting it on
28535         enum_body or enum_member_declarations so we can handle trailing
28536         commas on enumeration members.  Gets rid of a shift/reduce.
28537
28538         (type_list): Need a COMMA in the middle.
28539
28540         (indexer_declaration): Tell tokenizer to recognize get/set
28541
28542         * Remove old targets.
28543
28544         * Re-add the parser target.
28545
28546 2001-07-13  Simon Cozens <simon@simon-cozens.org>
28547
28548         * cs-parser.jay: Add precendence rules for a number of operators
28549         ot reduce the number of shift/reduce conflicts in the grammar.
28550
28551 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
28552
28553         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
28554         and put it here.
28555
28556         Get rid of old crufty code.
28557
28558         * rootcontext.cs: Use this to keep track of the parsed
28559         representation and the defined types available to the program. 
28560
28561         * gen-treedump.cs: adjust for new convention.
28562
28563         * type.cs: Split out the type manager, and the assembly builder
28564         from here. 
28565
28566         * typemanager.cs: the type manager will live here now.
28567
28568         * cil-codegen.cs: And the code generator here. 
28569
28570 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
28571
28572         * makefile: Fixed up for easy making.
28573
28574 2001-07-13  Simon Cozens <simon@simon-cozens.org>
28575
28576         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
28577         the 
28578
28579         (unary_expression): Expand pre_increment_expression and
28580         post_decrement_expression to reduce a shift/reduce.
28581
28582 2001-07-11  Simon Cozens
28583
28584         * cs-tokenizer.cs: Hex numbers should begin with a 0.
28585
28586         Improve allow_keyword_as_indent name.
28587
28588 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
28589
28590         * Adjustments for Beta2. 
28591
28592 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
28593
28594         * decl.cs: Added `Define' abstract method.
28595         (InTransit): new property, used to catch recursive definitions. 
28596
28597         * interface.cs: Implement `Define'. 
28598
28599         * modifiers.cs: Map Modifiers.constants to
28600         System.Reflection.TypeAttribute flags.
28601
28602         * class.cs: Keep track of types and user-defined types.
28603         (BuilderInit): New method for creating an assembly
28604         (ResolveType): New function to launch the resolution process, only
28605         used by interfaces for now.
28606
28607         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
28608         that are inserted into the name space. 
28609
28610 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
28611
28612         * ARGH.  I have screwed up my tree so many times due to the use of
28613         rsync rather than using CVS.  Going to fix this at once. 
28614
28615         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
28616         load types.
28617
28618 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
28619
28620         * Experiment successful: Use System.Type rather that our own
28621         version of Type.  
28622
28623 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
28624
28625         * cs-parser.jay: Removed nsAliases from here.
28626
28627         Use new namespaces, handle `using XXX;' 
28628
28629         * namespace.cs: Reimplemented namespace handling, use a recursive
28630         definition of the class.  Now we can keep track of using clauses
28631         and catch invalid using clauses.
28632
28633 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
28634
28635         * gen-treedump.cs: Adapted for all the renaming.
28636
28637         * expression.cs (Expression): this class now has a Type property
28638         which returns an expression Type.
28639
28640         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
28641         `Type', as this has a different meaning now in the base
28642
28643 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
28644
28645         * interface.cs, class.cs: Removed from all the sources the
28646         references to signature computation, as we can not do method
28647         signature computation during the parsing time, as we are not
28648         trying to solve at that point distinguishing:
28649
28650         class X {
28651                 void a (Blah x) {}
28652                 void a (NS.Blah x) {}
28653         }
28654
28655         Which depending on the context might be valid or not, as we do not
28656         know if Blah is the same thing as NS.Blah at that point.
28657
28658         * Redid everything so the code uses TypeRefs now instead of
28659         Types.  TypeRefs are just temporary type placeholders, that need
28660         to be resolved.  They initially have a pointer to a string and the
28661         current scope in which they are used.  This is used later by the
28662         compiler to resolve the reference to an actual Type. 
28663
28664         * DeclSpace is no longer a CIR.Type, and neither are
28665         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
28666         are all DeclSpaces, but no Types. 
28667
28668         * type.cs (TypeRefManager): This implements the TypeRef manager,
28669         which keeps track of all the types that need to be resolved after
28670         the parsing has finished. 
28671
28672 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
28673
28674         * ARGH.  We are going to have to store `foreach' as a class rather
28675         than resolving it, as we need to verify error 1579 after name
28676         resolution.   *OR* we could keep a flag that says `This request to
28677         IEnumerator comes from a foreach statement' which we can then use
28678         to generate the error.
28679
28680 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
28681
28682         * class.cs (TypeContainer.AddMethod): we now add methods to the
28683         MethodGroup instead of the method hashtable.  
28684
28685         * expression.cs: Add MethodGroup abstraction, which gets us one
28686         step closer to the specification in the way we handle method
28687         declarations.  
28688
28689         * cs-parser.jay (primary_expression): qualified_identifier now
28690         tried to match up an identifier to a local variable reference or
28691         to a parameter reference.
28692
28693         current_local_parameters is now a parser global variable that
28694         points to the current parameters for the block, used during name
28695         lookup.
28696
28697         (property_declaration): Now creates an implicit `value' argument to
28698         the set accessor.
28699
28700 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
28701
28702         * parameter.cs: Do not use `param' arguments as part of the
28703         signature, per the spec.
28704
28705 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
28706
28707         * decl.cs: Base class for classes, structs and interfaces.  This
28708         is the "Declaration Space" 
28709
28710         * cs-parser.jay: Use CheckDef for checking declaration errors
28711         instead of having one on each function.
28712
28713         * class.cs: Factor out some code for handling error handling in
28714         accordance to the "Declarations" section in the "Basic Concepts"
28715         chapter in the ECMA C# spec.
28716
28717         * interface.cs: Make all interface member classes derive from
28718         InterfaceMemberBase.
28719
28720 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
28721
28722         * Many things: all interfaces are parsed and generated in
28723         gen-treedump.  Support for member variables, constructors,
28724         destructors, properties, constants is there.
28725
28726         Beginning of the IL backend, but very little done, just there for
28727         testing purposes. 
28728
28729 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
28730
28731         * cs-parser.jay: Fix labeled statement.
28732
28733         * cs-tokenizer.cs (escape): Escape " and ' always.
28734         ref_line, ref_name: keep track of the line/filename as instructed
28735         by #line by the compiler.
28736         Parse #line.
28737
28738 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
28739
28740         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
28741         to match the values in System.CodeDOM.
28742
28743         Divid renamed to Divide.
28744
28745         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
28746         statements. 
28747         (Statements.set): remove.
28748
28749         * System.CodeDOM/CodeCatchClause.cs: always have a valid
28750         statements. 
28751
28752         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
28753         falseStatements always have valid values. 
28754
28755         * cs-parser.jay: Use System.CodeDOM now.
28756