mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-15 17:39:25 +02:00
Merging r32904
git-svn-id: branches/fixes_3_0@33844 -
This commit is contained in:
parent
874a86309f
commit
feb56205b3
@ -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 }
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user