From 9993f7ecb45c45fad5fb33d92db5a26eede1a3f1 Mon Sep 17 00:00:00 2001 From: blaise Date: Wed, 1 Feb 2012 19:21:23 +0000 Subject: + defcmp: structural equivalence for COM interfaces ~ pdecobj, pdecsub: parsing mode for routines: normal, class method, nameless routine, method reference = pdecsub: factored out parse_proc_parameter_dec(); code simplifications + symdef: tprocdef.add_to_procsym() + ptype, tokens: new UDT -- method reference git-svn-id: http://svn.freepascal.org/svn/fpc/branches/blaise@20212 3ad0048d-3df7-0310-abae-a5850022a9f2 --- closures/compiler/defcmp.pas | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'closures/compiler/defcmp.pas') diff --git a/closures/compiler/defcmp.pas b/closures/compiler/defcmp.pas index 25c4ca4f11..9f8e98c03f 100644 --- a/closures/compiler/defcmp.pas +++ b/closures/compiler/defcmp.pas @@ -145,7 +145,7 @@ implementation uses verbose,systems,constexp, symtable,symsym, - defutil,symutil; + defutil,symutil,pnameless; function compare_defs_ext(def_from,def_to : tdef; @@ -1390,6 +1390,15 @@ implementation doconv:=tc_variant_2_interface; eq:=te_convert_l2; end + { interface coercion } + else if (def_from.typ=objectdef) and + (tobjectdef(def_from).objecttype=odt_interfacecom) and + (tobjectdef(def_to).objecttype=odt_interfacecom) and + are_compatible_interfaces(tobjectdef(def_to),tobjectdef(def_from)) then + begin + doconv:=tc_equal; + eq:=te_convert_l1; + end { ugly, but delphi allows it } else if (def_from.typ in [orddef,enumdef]) and (m_delphi in current_settings.modeswitches) and -- cgit v1.2.1