Merging r32904

git-svn-id: branches/fixes_3_0@33844 -
This commit is contained in:
Jonas Maebe 2016-05-29 15:21:22 +00:00
parent 874a86309f
commit feb56205b3
2 changed files with 27 additions and 1 deletions

View File

@ -30,6 +30,8 @@ interface
type
tjvmtypeconvnode = class(tcgtypeconvnode)
class function target_specific_need_equal_typeconv(fromdef, todef: tdef): boolean; override;
function typecheck_dynarray_to_openarray: tnode; override;
function typecheck_string_to_chararray: tnode; override;
function typecheck_string_to_string: tnode;override;
@ -148,6 +150,19 @@ implementation
end;
class function tjvmtypeconvnode.target_specific_need_equal_typeconv(fromdef, todef: tdef): boolean;
begin
result:=
(fromdef<>todef) and
{ two procdefs that are structurally the same but semantically different
still need a convertion }
(
((fromdef.typ=procvardef) and
(todef.typ=procvardef))
);
end;
function tjvmtypeconvnode.typecheck_dynarray_to_openarray: tnode;
begin
{ all arrays are equal in Java }

View File

@ -65,6 +65,10 @@ interface
replace this explicit type conversion with a different node, or to
reject it after all }
function target_specific_explicit_typeconv: boolean;virtual;
{ called when inserttypeconv is used to convert to a def that is equal
according to compare_defs() }
class function target_specific_need_equal_typeconv(fromdef, todef: tdef): boolean; virtual;
protected
function typecheck_int_to_int : tnode; virtual;
function typecheck_cord_to_pointer : tnode; virtual;
@ -326,7 +330,8 @@ implementation
still expects the resultdef of the node to be a stringdef) }
if equal_defs(p.resultdef,def) and
(p.resultdef.typ=def.typ) and
not is_bitpacked_access(p) then
not is_bitpacked_access(p) and
not ctypeconvnode.target_specific_need_equal_typeconv(p.resultdef,def) then
begin
{ don't replace encoded string constants to rawbytestring encoding.
preserve the codepage }
@ -1991,6 +1996,12 @@ implementation
end;
class function ttypeconvnode.target_specific_need_equal_typeconv(fromdef, todef: tdef): boolean;
begin
result:=false;
end;
function ttypeconvnode.typecheck_proc_to_procvar : tnode;
var
pd : tabstractprocdef;