|
@@ -490,7 +490,7 @@ implementation
|
|
|
|
|
|
|
|
|
|
var
|
|
var
|
|
- t , vl, hp: tnode;
|
|
|
|
|
|
+ t,vl,hp,lefttarget,righttarget: tnode;
|
|
lt,rt : tnodetype;
|
|
lt,rt : tnodetype;
|
|
hdef,
|
|
hdef,
|
|
rd,ld , inttype: tdef;
|
|
rd,ld , inttype: tdef;
|
|
@@ -1309,6 +1309,27 @@ implementation
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+ { check if
|
|
|
|
+ typeinfo(<type1>)=/<>typeinfo(<type2>)
|
|
|
|
+ can be evaluated at compile time
|
|
|
|
+ }
|
|
|
|
+ lefttarget:=actualtargetnode(@left)^;
|
|
|
|
+ righttarget:=actualtargetnode(@right)^;
|
|
|
|
+ if (nodetype in [equaln,unequaln]) and (lefttarget.nodetype=inlinen) and (righttarget.nodetype=inlinen) and
|
|
|
|
+ (tinlinenode(lefttarget).inlinenumber=in_typeinfo_x) and (tinlinenode(righttarget).inlinenumber=in_typeinfo_x) and
|
|
|
|
+ (tinlinenode(lefttarget).left.nodetype=typen) and (tinlinenode(righttarget).left.nodetype=typen) then
|
|
|
|
+ begin
|
|
|
|
+ case nodetype of
|
|
|
|
+ equaln:
|
|
|
|
+ result:=cordconstnode.create(ord(ttypenode(tinlinenode(lefttarget).left).resultdef=ttypenode(tinlinenode(righttarget).left).resultdef),bool8type,false);
|
|
|
|
+ unequaln:
|
|
|
|
+ result:=cordconstnode.create(ord(ttypenode(tinlinenode(lefttarget).left).resultdef<>ttypenode(tinlinenode(righttarget).left).resultdef),bool8type,false);
|
|
|
|
+ else
|
|
|
|
+ Internalerror(2020092901);
|
|
|
|
+ end;
|
|
|
|
+ exit;
|
|
|
|
+ end;
|
|
|
|
+
|
|
{ slow simplifications }
|
|
{ slow simplifications }
|
|
if cs_opt_level2 in current_settings.optimizerswitches then
|
|
if cs_opt_level2 in current_settings.optimizerswitches then
|
|
begin
|
|
begin
|