summaryrefslogtreecommitdiff
path: root/closures/compiler/defcmp.pas
diff options
context:
space:
mode:
authorblaise <blaise@3ad0048d-3df7-0310-abae-a5850022a9f2>2012-02-01 19:21:23 +0000
committerblaise <blaise@3ad0048d-3df7-0310-abae-a5850022a9f2>2012-02-01 19:21:23 +0000
commit9993f7ecb45c45fad5fb33d92db5a26eede1a3f1 (patch)
treebc0fd7d7efc0b322da0b94627d81cfc847395a54 /closures/compiler/defcmp.pas
parent377f14fd544f12a50c90e9a193ac782a601e83cd (diff)
downloadfpc-9993f7ecb45c45fad5fb33d92db5a26eede1a3f1.tar.gz
+ defcmp: structural equivalence for COM interfacesblaise
~ 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
Diffstat (limited to 'closures/compiler/defcmp.pas')
-rw-r--r--closures/compiler/defcmp.pas11
1 files changed, 10 insertions, 1 deletions
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