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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -725,7 +725,7 @@ implementation
end; end;
subscriptn: subscriptn:
begin 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); inc(result,2);
if (result = NODE_COMPLEXITY_INF) then if (result = NODE_COMPLEXITY_INF) then
exit; exit;

View File

@ -511,7 +511,7 @@ implementation
(token=_OBJCPROTOCOL) or (token=_OBJCPROTOCOL) or
(token=_OBJCCATEGORY)) and (token=_OBJCCATEGORY)) and
(assigned(ttypesym(sym).typedef)) 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 (oo_is_forward in tobjectdef(ttypesym(sym).typedef).objectoptions) then
begin begin
case token of case token of

View File

@ -495,7 +495,7 @@ implementation
procvardef, procvardef,
classrefdef : ; classrefdef : ;
objectdef : 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 begin
Message(parser_e_illegal_parameter_list); Message(parser_e_illegal_parameter_list);
err:=true; err:=true;

View File

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

View File

@ -1275,8 +1275,8 @@ implementation
exit; exit;
end; end;
{ only allow nil for class and interface } { only allow nil for implicit pointer object types }
if is_class_or_interface_or_dispinterface_or_objc(def) then if is_implicit_pointer_object_type(def) then
begin begin
n:=comp_expr(true,false); n:=comp_expr(true,false);
if n.nodetype<>niln then 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_objc(def: tdef): boolean;
function is_class_or_interface_or_object(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(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_class_or_object(def: tdef): boolean;
function is_record(def: tdef): boolean; function is_record(def: tdef): boolean;
@ -1155,7 +1155,7 @@ implementation
procvardef : procvardef :
is_intregable:=tprocvardef(self).is_addressonly; is_intregable:=tprocvardef(self).is_addressonly;
objectdef: 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: setdef:
is_intregable:=is_smallset(self); is_intregable:=is_smallset(self);
recorddef: recorddef:
@ -5509,7 +5509,7 @@ implementation
end; end;
function is_class_or_interface_or_dispinterface_or_objc(def: tdef): boolean; function is_implicit_pointer_object_type(def: tdef): boolean;
begin begin
result:= result:=
assigned(def) and assigned(def) and