mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			404 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			404 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Java
		
	
	
	
| /* Test interface dispatch, type checking (instanceof), and casting. */
 | |
| 
 | |
| interface IA
 | |
| {
 | |
|   String a();
 | |
| }
 | |
| 
 | |
| interface IB extends IA
 | |
| {
 | |
|   String b();
 | |
| }
 | |
| 
 | |
| interface IC extends IB
 | |
| {
 | |
|   void c();
 | |
|   int d();
 | |
|   IB e(int i);
 | |
| }
 | |
| 
 | |
| interface ID
 | |
| {
 | |
|   String z();
 | |
|   String a();  
 | |
| }
 | |
| 
 | |
| class CA
 | |
| {
 | |
|   String a()
 | |
|   {
 | |
|     return "CA a()";
 | |
|   }
 | |
| }
 | |
| 
 | |
| class CB implements IB
 | |
| {
 | |
|   public String a()
 | |
|   {
 | |
|     return "CB a()";
 | |
|   }
 | |
|   
 | |
|   public String b()
 | |
|   {
 | |
|     return "CB b()";  
 | |
|   }
 | |
| }
 | |
| 
 | |
| class CC extends CB
 | |
| {
 | |
|   public int d()
 | |
|   {
 | |
|     return 99;
 | |
|   }
 | |
| }
 | |
| 
 | |
| class CD extends CC implements IC
 | |
| {
 | |
|   public String a()
 | |
|   {
 | |
|     return "CD a()";
 | |
|   }
 | |
|   
 | |
|   public void c()
 | |
|   {
 | |
|     System.out.println("CD c()");
 | |
|   }
 | |
|   
 | |
|   public int d()
 | |
|   {
 | |
|     return 6;
 | |
|   }
 | |
|   
 | |
|   public IB e(int i)
 | |
|   {
 | |
|     if (i == 1)
 | |
|       return new CB();
 | |
|     else
 | |
|       return new CD();
 | |
|   }
 | |
| }
 | |
| 
 | |
| class CE extends CB implements IB, ID
 | |
| {
 | |
|   public String a()
 | |
|   {
 | |
|     return ("CE a()");
 | |
|   }
 | |
|   
 | |
|   public String b()
 | |
|   {
 | |
|     return ("CE b()");
 | |
|   }
 | |
|     
 | |
|   public String z()
 | |
|   {
 | |
|     return("CE z()");  
 | |
|   }
 | |
| }
 | |
| 
 | |
| 
 | |
| public class InterfaceDispatch
 | |
| {
 | |
|   public static void main(String args[])
 | |
|   {
 | |
|     new InterfaceDispatch();
 | |
|   }
 | |
|   
 | |
|   public InterfaceDispatch()
 | |
|   {
 | |
|     /* _Jv_InstanceOf */
 | |
|     
 | |
|     /* Object instanceof CLASS */
 | |
|     Object obj = new CA();
 | |
|     
 | |
|     if (obj instanceof CA)
 | |
|       {
 | |
|         System.out.println ("ok 1");
 | |
|       }
 | |
|     else
 | |
|       {
 | |
|         System.out.println ("FAIL 1");
 | |
|       }
 | |
| 
 | |
|     obj = new CD();
 | |
|     
 | |
|     if (!(obj instanceof CA))
 | |
|       {
 | |
|         System.out.println ("ok 2a");
 | |
|       }
 | |
|     else
 | |
|       {
 | |
|         System.out.println ("FAIL 2a");
 | |
|       }
 | |
| 
 | |
|     if (obj instanceof CB)
 | |
|       {
 | |
|         System.out.println ("ok 2b");
 | |
|       }
 | |
|     else
 | |
|       {
 | |
|         System.out.println ("FAIL 2b");
 | |
|       }
 | |
| 
 | |
|     
 | |
|     /* Object instanceof INTERFACE */
 | |
|     obj = new CB();
 | |
|     
 | |
|     if (!(obj instanceof IC))
 | |
|       {
 | |
|         System.out.println("ok 3");
 | |
|       }
 | |
|     else
 | |
|       {
 | |
|         System.out.println ("FAIL 3");
 | |
|       }
 | |
|     
 | |
|     if (obj instanceof IB)
 | |
|       {
 | |
|         System.out.println("ok 4");
 | |
|       }
 | |
|     else
 | |
|       {
 | |
|         System.out.println ("FAIL 4");
 | |
|       }
 | |
|     
 | |
|     /* InterfaceRef instanceof INTERFACE */
 | |
|     
 | |
|     IA ia = new CB();
 | |
|     
 | |
|     if (ia instanceof IB)
 | |
|       {
 | |
|         System.out.println("ok 5");
 | |
|       }
 | |
|     else
 | |
|       {
 | |
|         System.out.println ("FAIL 5");
 | |
|       }
 | |
|     
 | |
|     
 | |
|     if (!(ia instanceof IC))
 | |
|       {
 | |
|         System.out.println("ok 6");
 | |
|       }
 | |
|     else
 | |
|       {
 | |
|         System.out.println ("FAIL 6");
 | |
|       }
 | |
|       
 | |
|     /* InterfaceRef instanceof CLASS */
 | |
|     
 | |
|     if (ia instanceof CB)
 | |
|       {
 | |
|         System.out.println("ok 7");
 | |
|       }
 | |
|     else
 | |
|       {
 | |
|         System.out.println ("FAIL 7");
 | |
|       }
 | |
|       
 | |
|     
 | |
|     if (!(ia instanceof CD))
 | |
|       {
 | |
|         System.out.println("ok 8");
 | |
|       }
 | |
|     else
 | |
|       {
 | |
|         System.out.println ("FAIL 8");
 | |
|       }    
 | |
|     
 | |
|     
 | |
|     /* _Jv_CheckCast */
 | |
|     Object obj_ca = new CA();
 | |
|     Object obj_cc = new CC();    
 | |
|     
 | |
|     IA ia2;
 | |
|     
 | |
|     try
 | |
|       {
 | |
|         ia2 = (IA) obj_cc;
 | |
|         System.out.println("ok 9");
 | |
|       }
 | |
|     catch (ClassCastException x)
 | |
|       {
 | |
|         System.out.println("FAIL 9");
 | |
|       }
 | |
|     
 | |
|     CD cd;
 | |
|     
 | |
|     try
 | |
|       {
 | |
|         cd = (CD) obj_ca;
 | |
|         System.out.println("FAIL 10");
 | |
|       }
 | |
|     catch (ClassCastException x)
 | |
|       {
 | |
|         System.out.println("ok 10");
 | |
|       }
 | |
|     
 | |
|     IA ia3;
 | |
|     
 | |
|     try
 | |
|       {
 | |
|         ia3 = (IB) obj_ca;
 | |
|         System.out.println("FAIL 11");
 | |
|       }
 | |
|     catch (ClassCastException x)
 | |
|       {
 | |
|         System.out.println("ok 11");
 | |
|       }
 | |
|       
 | |
|     /* _Jv_LookupInterfaceMethod */
 | |
|     Object obj_cb = new CB();
 | |
|     
 | |
|     IB ib = (IB) obj_cb;
 | |
|     ib.b();
 | |
|     if (ib.a().equalsIgnoreCase("CB a()"))
 | |
|       System.out.println("ok 12");
 | |
|     else
 | |
|       System.out.println("FAIL 12");
 | |
|       
 | |
|     IC ic = new CD();
 | |
|     if (ic.a().equalsIgnoreCase("CD a()"))
 | |
|       System.out.println("ok 13");
 | |
|     else
 | |
|       System.out.println("FAIL 13");
 | |
|           
 | |
|     if (ic.d() == 6)
 | |
|       System.out.println("ok 14");
 | |
|     else
 | |
|       System.out.println("FAIL 14");
 | |
|       
 | |
|     Object ce = new CE();
 | |
|     
 | |
|     ib = (IB) ce;
 | |
|     ID id = (ID) ce;
 | |
|     
 | |
|     if (ib.b().equals("CE b()") && id.a().equals("CE a()"))
 | |
|       System.out.println("ok 15");
 | |
|     else
 | |
|       System.out.println("FAIL 15");
 | |
|     
 | |
|     String t = ((ID)ce).z();
 | |
|     
 | |
|     if (t.equalsIgnoreCase("CE z()"))
 | |
|       System.out.println("ok 16");
 | |
|     else
 | |
|       System.out.println("FAIL 16");
 | |
|       
 | |
|     /* Array types */
 | |
|     
 | |
|     Object[] obj_a = new CC[10];
 | |
|     try
 | |
|       {
 | |
|         CB[] ca_a = (CB[]) obj_a;
 | |
|         System.out.println("ok 17");
 | |
|       }
 | |
|     catch (ClassCastException x)
 | |
|       {
 | |
|         System.out.println("FAIL 17");
 | |
|       }
 | |
|     
 | |
|     if (obj_a instanceof IB[])
 | |
|       {
 | |
|         System.out.println("ok 18");      
 | |
|       }
 | |
|     else
 | |
|       {
 | |
|         System.out.println("FAIL 18");      
 | |
|       }
 | |
|     
 | |
|     IB[] ib_a = new CD[5];
 | |
|     try 
 | |
|       {
 | |
|         CD[] cd_a = (CD[]) ib_a;
 | |
|         System.out.println("ok 19");
 | |
|       }
 | |
|     catch (ClassCastException x)
 | |
|       {
 | |
|         System.out.println("FAIL 19");
 | |
|       }
 | |
|       
 | |
|     CA[] ca_a;
 | |
| 
 | |
|     try 
 | |
|       {
 | |
|         ca_a = (CA[]) ib_a;
 | |
|         System.out.println("FAIL 20");
 | |
|       }
 | |
|     catch (ClassCastException x)
 | |
|       {
 | |
|         System.out.println("ok 20");
 | |
|       }
 | |
| 
 | |
|     
 | |
|     /* Primitive types */
 | |
|     
 | |
|     short[] short_a = new short[100];
 | |
|     
 | |
|     try
 | |
|       {
 | |
|         obj = short_a;
 | |
|         System.out.println("ok 21");
 | |
|       }
 | |
|     catch (ClassCastException x)
 | |
|       {
 | |
|         System.out.println("FAIL 21");      
 | |
|       }
 | |
| 
 | |
|     try
 | |
|       {
 | |
|         short[] short_b = (short[]) obj;
 | |
|         System.out.println("ok 22");
 | |
|       }
 | |
|     catch (ClassCastException x)
 | |
|       {
 | |
|         System.out.println("FAIL 22");      
 | |
|       }
 | |
| 
 | |
|     int[] short_b;
 | |
| 
 | |
|     try
 | |
|       {
 | |
|         short_b = (int[]) obj;
 | |
|         System.out.println("FAIL 23");
 | |
|       }
 | |
|     catch (ClassCastException x)
 | |
|       {
 | |
|         System.out.println("ok 23");      
 | |
|       }
 | |
| 
 | |
|     Object obj1 = new int[25];
 | |
|     
 | |
|     if (obj1 instanceof short[])
 | |
|       {
 | |
|         System.out.println("FAIL 24");      
 | |
|       }
 | |
|     else
 | |
|       {
 | |
|         System.out.println("ok 24");
 | |
|       }
 | |
|     
 | |
|     if (obj1 instanceof int[])
 | |
|       {
 | |
|         System.out.println("ok 25");
 | |
|       }
 | |
|     else
 | |
|       {
 | |
|         System.out.println("FAIL 25");
 | |
|       }
 | |
|       
 | |
|     /* null assignment */
 | |
|     
 | |
|     CA obj_ca2 = null;
 | |
|     
 | |
|     if (obj_ca2 instanceof CA)
 | |
|       {
 | |
|         System.out.println("FAIL 26");        
 | |
|       }
 | |
|     else
 | |
|       {
 | |
|         System.out.println("ok 26");
 | |
|       }
 | |
|   }  
 | |
| }
 |