|
@@ -1206,28 +1206,29 @@ implementation
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
- { 2 booleans? Make them equal to the largest boolean }
|
|
|
+ { 2 booleans? }
|
|
|
if (is_boolean(ld) and is_boolean(rd)) then
|
|
|
begin
|
|
|
- if (torddef(left.resultdef).size>torddef(right.resultdef).size) or
|
|
|
- (is_cbool(left.resultdef) and not is_cbool(right.resultdef)) then
|
|
|
- begin
|
|
|
- right:=ctypeconvnode.create_internal(right,left.resultdef);
|
|
|
- ttypeconvnode(right).convtype:=tc_bool_2_bool;
|
|
|
- typecheckpass(right);
|
|
|
- end
|
|
|
- else if (torddef(left.resultdef).size<torddef(right.resultdef).size) or
|
|
|
- (not is_cbool(left.resultdef) and is_cbool(right.resultdef)) then
|
|
|
- begin
|
|
|
- left:=ctypeconvnode.create_internal(left,right.resultdef);
|
|
|
- ttypeconvnode(left).convtype:=tc_bool_2_bool;
|
|
|
- typecheckpass(left);
|
|
|
- end;
|
|
|
case nodetype of
|
|
|
xorn,
|
|
|
andn,
|
|
|
orn:
|
|
|
begin
|
|
|
+ { Make sides equal to the largest boolean }
|
|
|
+ if (torddef(left.resultdef).size>torddef(right.resultdef).size) or
|
|
|
+ (is_cbool(left.resultdef) and not is_cbool(right.resultdef)) then
|
|
|
+ begin
|
|
|
+ right:=ctypeconvnode.create_internal(right,left.resultdef);
|
|
|
+ ttypeconvnode(right).convtype:=tc_bool_2_bool;
|
|
|
+ typecheckpass(right);
|
|
|
+ end
|
|
|
+ else if (torddef(left.resultdef).size<torddef(right.resultdef).size) or
|
|
|
+ (not is_cbool(left.resultdef) and is_cbool(right.resultdef)) then
|
|
|
+ begin
|
|
|
+ left:=ctypeconvnode.create_internal(left,right.resultdef);
|
|
|
+ ttypeconvnode(left).convtype:=tc_bool_2_bool;
|
|
|
+ typecheckpass(left);
|
|
|
+ end;
|
|
|
end;
|
|
|
ltn,
|
|
|
lten,
|