mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-08 21:48:09 +02:00
* 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:
parent
e8871f0885
commit
2222f2c44b
@ -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));
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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));
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user