Page 1 of 1

Namespace clarifications

PostPosted: Tue Jan 13, 2009 4:20 am
by Charles
Due to some recent bug reports that came straight to me, I have cleaned up some of the behavior around namespaces and the "use" directive.

First, Cobra had the weird property that if you wrote "use A.B.C" it also implied "use A.B" and "use A". In other words, Cobra would follow the namespace parent chain. I don't know why that was there in the first place, but it could lead to some strange results in complex programs with many "use" directives. Sometimes you only want what's in "A.B.C" and not in the parents.

Second, Cobra can now give this error:
Code: Select all
Ambiguous reference "Foo" found in namespaces "A" and "B".

In other words, if you use a class Foo and there are two different Foo's visible given the "use" directives, you must resolve the ambiguity with qualification (such as A.Foo or B.Foo). Previously, Cobra would just pick the first one which could be a source of confusion. Also, that meant that the order of "use" directives mattered. Now it does not.

Third, Cobra was relying on the C# "using" statement in generated code and also referencing its own types (such as RequireException, AssertException, etc.) without qualification. That was a time bomb waiting to go off. All types are now fully qualified in the generated code which eliminates the possibility of surprises.

I had to tweak just a few test cases and a few lines of code in the compiler. So the pain here is small. The improvement in avoiding pain from ambiguity and strange errors is huge.

All regression test cases pass. But if you have any problems let me know.

Some reminders:

-- These "use" directives are implied in every Cobra file:
use System
use System.Collections.Generic
use System.IO
use System.Text
use Cobra.Lang

(I'm undecided if System.Collections should be included. Feel free to muse.)

-- Generics are considered to have a name that incorporates the number of generic arguments. So "X", "X<of>" and "X<of,>" are three different types with no naming conflict (same as C#).

Re: Namespace clarifications

PostPosted: Wed Jan 14, 2009 5:42 am
by pchapin
These changes/fixes sound great to me... a nice clean up. Thanks!

Re: Namespace clarifications

PostPosted: Wed Jan 14, 2009 7:11 pm
by Charles
You're welcome.