mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 19:09:16 +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' }
|
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));
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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));
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user