// **********************************************************************
//
// Copyright (c) 1999
// Object Oriented Concepts, Inc.
// Billerica, MA, USA
//
// All Rights Reserved
//
// **********************************************************************

module A
{
    typedef long Along;

    module B
    {
	typedef long Blong;
	typedef short Blong; // Error, Blong already defined
	typedef short bLONG; // Error, Blong already defined

	interface C
	{
	    typedef long Clong;

	    attribute Clong Cattr;
	    attribute Blong Battr;
	    attribute Along Aattr;
	};

	interface D
	{
 	    attribute ::A::B::C::Clong Cattr;
	};

 	interface E : C
 	{
 	    attribute Along           Aattr1;
 	    attribute A::Along        Aattr2;

 	    attribute Blong           Battr1;
 	    attribute B::Blong        Battr2;
 	    attribute A::B::Blong     Battr3;

  	    attribute Clong           Cattr1;
  	    attribute C::Clong        Cattr2;
  	    attribute B::C::Clong     Cattr3;
  	    attribute A::B::C::Clong  Cattr4;
 	};

 	interface F
 	{
 	    typedef long Def;
 	};

 	interface G
 	{
 	    typedef short Def;
 	};

 	interface H : F, G
 	{
	    attribute F::Def attr1;
	    attribute G::Def attr2;
	    attribute Def attr3; // Error, Def is ambigious
 	};

	interface I
	{
	    void op();
	};

	interface J
	{
	    void op();
	};

	interface K : I, J // Error, op() is ambigious
	{
	};

	interface L : I
	{
	    void op(); // Error, op() is already defined in base
	    void OP(); // Error, op() is already defined in base
	};
    };

    typedef B::Blong Blong;
    typedef B::C::Clong Clong;
};
