* renamed is_class_or_interface_or_dispinterface_or_objc() into

is_implicit_pointer_object_type() to better indicate the purpose of
    that routine, and to avoid having to change its name every time
    a new object type with this property is added

git-svn-id: trunk@16664 -
This commit is contained in:
Jonas Maebe 2010-12-30 15:19:54 +00:00
parent e8871f0885
commit 2222f2c44b
13 changed files with 40 additions and 41 deletions

View File

@ -941,7 +941,7 @@ implementation
on when the typecast is changed to 'as' }
current_asmdata.getdatalabel(TAsmLabel(pointer(def.dwarf_lab)));
current_asmdata.getdatalabel(TAsmLabel(pointer(def.dwarf_ref_lab)));
if is_class_or_interface_or_dispinterface_or_objc(def) then
if is_implicit_pointer_object_type(def) then
current_asmdata.getdatalabel(TAsmLabel(pointer(tobjectdef(def).dwarf_struct_lab)));
end;
end;
@ -953,7 +953,7 @@ implementation
{ addrlabel instead of datalabel because it must be a local one }
current_asmdata.getaddrlabel(TAsmLabel(pointer(def.dwarf_lab)));
current_asmdata.getaddrlabel(TAsmLabel(pointer(def.dwarf_ref_lab)));
if is_class_or_interface_or_dispinterface_or_objc(def) then
if is_implicit_pointer_object_type(def) then
current_asmdata.getaddrlabel(TAsmLabel(pointer(tobjectdef(def).dwarf_struct_lab)));
end;
if def.dbg_state=dbg_state_used then
@ -3419,7 +3419,7 @@ implementation
current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_uleb128bit(0));
if (def.childof.dbg_state=dbg_state_unused) then
def.childof.dbg_state:=dbg_state_used;
if is_class_or_interface_or_dispinterface_or_objc(def) then
if is_implicit_pointer_object_type(def) then
append_labelentry_ref(DW_AT_type,def_dwarf_class_struct_lab(def.childof))
else
append_labelentry_ref(DW_AT_type,def_dwarf_lab(def.childof));

View File

@ -282,7 +282,7 @@ implementation
objectdef:
begin
if (m_delphi in current_settings.modeswitches) and
is_class_or_interface_or_dispinterface_or_objc(def_from) and
is_implicit_pointer_object_type(def_from) and
(cdo_explicit in cdoptions) then
begin
eq:=te_convert_l1;
@ -1131,11 +1131,11 @@ implementation
classrefdef,
objectdef :
begin
{ class types and class reference type
{ implicit pointer object and class reference types
can be assigned to void pointers, but it is less
preferred than assigning to a related objectdef }
if (
is_class_or_interface_or_dispinterface_or_objc(def_from) or
is_implicit_pointer_object_type(def_from) or
(def_from.typ=classrefdef)
) and
(tpointerdef(def_to).pointeddef.typ=orddef) and
@ -1268,8 +1268,8 @@ implementation
eq:=te_convert_l1;
end
else
{ Class/interface specific }
if is_class_or_interface_or_dispinterface_or_objc(def_to) then
{ specific to implicit pointer object types }
if is_implicit_pointer_object_type(def_to) then
begin
{ void pointer also for delphi mode }
if (m_delphi in current_settings.modeswitches) and

View File

@ -1003,7 +1003,7 @@ implementation
end;
objectdef :
begin
if is_class_or_interface_or_dispinterface_or_objc(def) then
if is_implicit_pointer_object_type(def) then
result := OS_ADDR
else
result:=int_cgsize(def.size);

View File

@ -229,7 +229,7 @@ implementation
pointerdef :
begin
if ((rd.typ in [orddef,enumdef,pointerdef,classrefdef,procvardef]) or
is_class_or_interface_or_dispinterface_or_objc(rd)) then
is_implicit_pointer_object_type(rd)) then
begin
allowed:=false;
exit;
@ -289,9 +289,9 @@ implementation
end;
objectdef :
begin
{ <> and = are defined for classes }
{ <> and = are defined for implicit pointer object types }
if (treetyp in [equaln,unequaln]) and
is_class_or_interface_or_dispinterface_or_objc(ld) then
is_implicit_pointer_object_type(ld) then
begin
allowed:=false;
exit;
@ -944,7 +944,7 @@ implementation
end;
subscriptn :
begin
if is_class_or_interface_or_dispinterface_or_objc(tunarynode(p).left.resultdef) then
if is_implicit_pointer_object_type(tunarynode(p).left.resultdef) then
newstate := vs_read;
p:=tunarynode(p).left;
end;
@ -1098,7 +1098,7 @@ implementation
pointerdef :
gotpointer:=true;
objectdef :
gotclass:=is_class_or_interface_or_dispinterface_or_objc(hp.resultdef);
gotclass:=is_implicit_pointer_object_type(hp.resultdef);
recorddef :
gotrecord:=true;
classrefdef :
@ -1215,7 +1215,7 @@ implementation
pointerdef :
gotpointer:=true;
objectdef :
gotclass:=is_class_or_interface_or_dispinterface_or_objc(hp.resultdef);
gotclass:=is_implicit_pointer_object_type(hp.resultdef);
classrefdef :
gotclass:=true;
arraydef :
@ -1309,10 +1309,9 @@ implementation
else
exit;
end;
{ a class/interface access is an implicit }
{ dereferencing }
{ implicit pointer object types result in dereferencing }
hp:=tsubscriptnode(hp).left;
if is_class_or_interface_or_dispinterface_or_objc(hp.resultdef) then
if is_implicit_pointer_object_type(hp.resultdef) then
gotderef:=true;
end;
muln,
@ -1401,7 +1400,7 @@ implementation
pointerdef :
gotpointer:=true;
objectdef :
gotclass:=is_class_or_interface_or_dispinterface_or_objc(hp.resultdef);
gotclass:=is_implicit_pointer_object_type(hp.resultdef);
recorddef, { handle record like class it needs a subscription }
classrefdef :
gotclass:=true;

View File

@ -1598,19 +1598,19 @@ implementation
CGMessage3(type_e_operator_not_supported_for_types,node2opstr(nodetype),ld.typename,rd.typename);
end
{ class or interface equation }
else if is_class_or_interface_or_dispinterface_or_objc(rd) or is_class_or_interface_or_dispinterface_or_objc(ld) then
{ implicit pointer object type comparison }
else if is_implicit_pointer_object_type(rd) or is_implicit_pointer_object_type(ld) then
begin
if (nodetype in [equaln,unequaln]) then
begin
if is_class_or_interface_or_dispinterface_or_objc(rd) and is_class_or_interface_or_dispinterface_or_objc(ld) then
if is_implicit_pointer_object_type(rd) and is_implicit_pointer_object_type(ld) then
begin
if tobjectdef(rd).is_related(tobjectdef(ld)) then
inserttypeconv(right,left.resultdef)
else
inserttypeconv(left,right.resultdef);
end
else if is_class_or_interface_or_dispinterface_or_objc(rd) then
else if is_implicit_pointer_object_type(rd) then
inserttypeconv(left,right.resultdef)
else
inserttypeconv(right,left.resultdef);
@ -1633,8 +1633,8 @@ implementation
CGMessage3(type_e_operator_not_supported_for_types,node2opstr(nodetype),ld.typename,rd.typename);
end
{ allows comperasion with nil pointer }
else if is_class_or_interface_or_dispinterface_or_objc(rd) or (rd.typ=classrefdef) then
{ allow comparison with nil pointer }
else if is_implicit_pointer_object_type(rd) or (rd.typ=classrefdef) then
begin
if (nodetype in [equaln,unequaln]) then
inserttypeconv(left,right.resultdef)
@ -1642,7 +1642,7 @@ implementation
CGMessage3(type_e_operator_not_supported_for_types,node2opstr(nodetype),ld.typename,rd.typename);
end
else if is_class_or_interface_or_dispinterface_or_objc(ld) or (ld.typ=classrefdef) then
else if is_implicit_pointer_object_type(ld) or (ld.typ=classrefdef) then
begin
if (nodetype in [equaln,unequaln]) then
inserttypeconv(right,left.resultdef)
@ -2710,7 +2710,7 @@ implementation
expectloc:=LOC_FLAGS;
end
else if is_class_or_interface_or_dispinterface_or_objc(ld) then
else if is_implicit_pointer_object_type(ld) then
begin
expectloc:=LOC_FLAGS;
end

View File

@ -291,8 +291,8 @@ implementation
if codegenerror then
exit;
paraloc1.init;
{ classes and interfaces must be dereferenced implicitly }
if is_class_or_interface_or_dispinterface_or_objc(left.resultdef) then
{ several object types must be dereferenced implicitly }
if is_implicit_pointer_object_type(left.resultdef) then
begin
{ the contents of a class are aligned to a sizeof(pointer) }
location_reset_ref(location,LOC_REFERENCE,def_cgsize(resultdef),sizeof(pint));

View File

@ -687,8 +687,8 @@ implementation
if codegenerror then
exit;
{ classes must be dereferenced implicitly }
if is_class_or_interface_or_dispinterface_or_objc(left.resultdef) then
{ several object types must be dereferenced implicitly }
if is_implicit_pointer_object_type(left.resultdef) then
expectloc:=LOC_REFERENCE
else
begin

View File

@ -725,7 +725,7 @@ implementation
end;
subscriptn:
begin
if is_class_or_interface_or_dispinterface_or_objc(tunarynode(p).left.resultdef) then
if is_implicit_pointer_object_type(tunarynode(p).left.resultdef) then
inc(result,2);
if (result = NODE_COMPLEXITY_INF) then
exit;

View File

@ -511,7 +511,7 @@ implementation
(token=_OBJCPROTOCOL) or
(token=_OBJCCATEGORY)) and
(assigned(ttypesym(sym).typedef)) and
is_class_or_interface_or_dispinterface_or_objc(ttypesym(sym).typedef) and
is_implicit_pointer_object_type(ttypesym(sym).typedef) and
(oo_is_forward in tobjectdef(ttypesym(sym).typedef).objectoptions) then
begin
case token of

View File

@ -495,7 +495,7 @@ implementation
procvardef,
classrefdef : ;
objectdef :
if not is_class_or_interface_or_dispinterface_or_objc(p1.resultdef) then
if not is_implicit_pointer_object_type(p1.resultdef) then
begin
Message(parser_e_illegal_parameter_list);
err:=true;

View File

@ -597,8 +597,8 @@ implementation
p:=ctemprefnode.create(calltempnode);
typecheckpass(p);
end;
{ classes and interfaces have implicit dereferencing }
hasimplicitderef:=is_class_or_interface_or_dispinterface_or_objc(p.resultdef) or
{ several object types have implicit dereferencing }
hasimplicitderef:=is_implicit_pointer_object_type(p.resultdef) or
(p.resultdef.typ = classrefdef);
if hasimplicitderef then
hdef:=p.resultdef

View File

@ -1275,8 +1275,8 @@ implementation
exit;
end;
{ only allow nil for class and interface }
if is_class_or_interface_or_dispinterface_or_objc(def) then
{ only allow nil for implicit pointer object types }
if is_implicit_pointer_object_type(def) then
begin
n:=comp_expr(true,false);
if n.nodetype<>niln then

View File

@ -783,7 +783,7 @@ interface
function is_class_or_interface_or_objc(def: tdef): boolean;
function is_class_or_interface_or_object(def: tdef): boolean;
function is_class_or_interface_or_dispinterface(def: tdef): boolean;
function is_class_or_interface_or_dispinterface_or_objc(def: tdef): boolean;
function is_implicit_pointer_object_type(def: tdef): boolean;
function is_class_or_object(def: tdef): boolean;
function is_record(def: tdef): boolean;
@ -1155,7 +1155,7 @@ implementation
procvardef :
is_intregable:=tprocvardef(self).is_addressonly;
objectdef:
is_intregable:=(is_class_or_interface_or_dispinterface_or_objc(self)) and not needs_inittable;
is_intregable:=(is_implicit_pointer_object_type(self)) and not needs_inittable;
setdef:
is_intregable:=is_smallset(self);
recorddef:
@ -5509,7 +5509,7 @@ implementation
end;
function is_class_or_interface_or_dispinterface_or_objc(def: tdef): boolean;
function is_implicit_pointer_object_type(def: tdef): boolean;
begin
result:=
assigned(def) and