mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-30 17:51:32 +01:00 
			
		
		
		
	* properly inherit interface types, resolves #6690
git-svn-id: trunk@7102 -
This commit is contained in:
		
							parent
							
								
									f87e96dfb0
								
							
						
					
					
						commit
						2a244b25fc
					
				
							
								
								
									
										1
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							| @ -8045,6 +8045,7 @@ tests/webtbs/tw6641.pp svneol=native#text/plain | ||||
| tests/webtbs/tw6684.pp svneol=native#text/plain | ||||
| tests/webtbs/tw6686.pp svneol=native#text/plain | ||||
| tests/webtbs/tw6687.pp svneol=native#text/plain | ||||
| tests/webtbs/tw6690.pp svneol=native#text/plain | ||||
| tests/webtbs/tw6700.pp svneol=native#text/plain | ||||
| tests/webtbs/tw6735.pp svneol=native#text/plain | ||||
| tests/webtbs/tw6742.pp svneol=native#text/plain | ||||
|  | ||||
| @ -420,8 +420,12 @@ implementation | ||||
|                          end; | ||||
|                      odt_interfacecorba, | ||||
|                      odt_interfacecom: | ||||
|                        if not(is_interface(childof)) then | ||||
|                          Message(parser_e_mix_of_classes_and_objects); | ||||
|                        begin | ||||
|                          if not(is_interface(childof)) then | ||||
|                            Message(parser_e_mix_of_classes_and_objects); | ||||
|                          classtype:=childof.objecttype; | ||||
|                          aktobjectdef.objecttype:=classtype; | ||||
|                        end; | ||||
|                      odt_cppclass: | ||||
|                        if not(is_cppclass(childof)) then | ||||
|                          Message(parser_e_mix_of_classes_and_objects); | ||||
|  | ||||
							
								
								
									
										76
									
								
								tests/webtbs/tw6690.pp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								tests/webtbs/tw6690.pp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,76 @@ | ||||
| program inheritedcorba; | ||||
| {$mode objfpc}{$h+} | ||||
| uses | ||||
|  typinfo; | ||||
| 
 | ||||
| type | ||||
|  {$interfaces corba} | ||||
|  iinterface1 = interface | ||||
|   procedure proc1; | ||||
|  end; | ||||
|  {$interfaces com} | ||||
|  iinterface2 = interface | ||||
|   procedure proc2; | ||||
|  end; | ||||
| 
 | ||||
|  iinterface3 = interface(iinterface1) | ||||
|   procedure proc3; | ||||
|  end; | ||||
|  iinterface4 = interface(iinterface2) | ||||
|   procedure proc4; | ||||
|  end; | ||||
| 
 | ||||
|  {$interfaces corba} | ||||
|  iinterface5 = interface(iinterface1) | ||||
|   procedure proc5; | ||||
|  end; | ||||
|  iinterface6 = interface(iinterface2) | ||||
|   procedure proc6; | ||||
|  end; | ||||
| 
 | ||||
|  tclass1 = class(iinterface1) | ||||
|   public | ||||
|    procedure proc1; | ||||
|  end; | ||||
| 
 | ||||
| {tclass6 = class(iinterface6) | ||||
|   public | ||||
|    procedure proc6; | ||||
|  end; | ||||
| } | ||||
| { does not compile because it is com style interface: | ||||
|  inheritedcorba.pas(36,12) Error: No matching implementation for | ||||
|  interface method "IUnknown.QueryInterface(const TGuid,out <Formal type>): | ||||
|   LongInt;StdCall" found  ... | ||||
| } | ||||
| procedure writeinterfacetype(po: ptypeinfo); | ||||
| begin | ||||
|  case po^.kind of | ||||
|   tkinterfaceraw: if (po^.name<>'iinterface1') and | ||||
|                   (po^.name<>'iinterface3') and | ||||
|                   (po^.name<>'iinterface5') then | ||||
|                   halt(1); | ||||
|   tkinterface: if (po^.name<>'iinterface2') and | ||||
|                   (po^.name<>'iinterface4') and | ||||
|                   (po^.name<>'iinterface6') then | ||||
|                   halt(1); | ||||
|   else | ||||
|     halt(1); | ||||
|  end; | ||||
| end; | ||||
| 
 | ||||
| { tclass1 } | ||||
| 
 | ||||
| procedure tclass1.proc1; | ||||
| begin | ||||
| end; | ||||
| 
 | ||||
| begin | ||||
|  writeinterfacetype(typeinfo(iinterface1)); | ||||
|  writeinterfacetype(typeinfo(iinterface2)); | ||||
|  writeinterfacetype(typeinfo(iinterface3)); | ||||
|  writeinterfacetype(typeinfo(iinterface4)); | ||||
|  writeinterfacetype(typeinfo(iinterface5)); | ||||
|  writeinterfacetype(typeinfo(iinterface6)); | ||||
|  writeln('ok'); | ||||
| end. | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 florian
						florian