diff --git a/compiler/dbgdwarf.pas b/compiler/dbgdwarf.pas index 0645abed82..c0230ca0d1 100644 --- a/compiler/dbgdwarf.pas +++ b/compiler/dbgdwarf.pas @@ -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)); diff --git a/compiler/defcmp.pas b/compiler/defcmp.pas index a52201d6dd..28b11e1620 100644 --- a/compiler/defcmp.pas +++ b/compiler/defcmp.pas @@ -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 diff --git a/compiler/defutil.pas b/compiler/defutil.pas index 9f7dd87ffa..6708c3f6f0 100644 --- a/compiler/defutil.pas +++ b/compiler/defutil.pas @@ -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); diff --git a/compiler/htypechk.pas b/compiler/htypechk.pas index 89b3957b29..4bd4402ace 100644 --- a/compiler/htypechk.pas +++ b/compiler/htypechk.pas @@ -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; diff --git a/compiler/nadd.pas b/compiler/nadd.pas index 476d833b6b..ff376cbf52 100644 --- a/compiler/nadd.pas +++ b/compiler/nadd.pas @@ -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 diff --git a/compiler/ncgmem.pas b/compiler/ncgmem.pas index 3768cb3403..2cdd7f5769 100644 --- a/compiler/ncgmem.pas +++ b/compiler/ncgmem.pas @@ -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)); diff --git a/compiler/nmem.pas b/compiler/nmem.pas index cb72dae909..d2121dd7f0 100644 --- a/compiler/nmem.pas +++ b/compiler/nmem.pas @@ -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 diff --git a/compiler/nutils.pas b/compiler/nutils.pas index 70c88a3dde..36f8343d66 100644 --- a/compiler/nutils.pas +++ b/compiler/nutils.pas @@ -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; diff --git a/compiler/pdecl.pas b/compiler/pdecl.pas index 2033e0f438..7db2f16ab8 100644 --- a/compiler/pdecl.pas +++ b/compiler/pdecl.pas @@ -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 diff --git a/compiler/pexpr.pas b/compiler/pexpr.pas index 44cb8946c8..54c92097af 100644 --- a/compiler/pexpr.pas +++ b/compiler/pexpr.pas @@ -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; diff --git a/compiler/pstatmnt.pas b/compiler/pstatmnt.pas index 01f39e75bd..1e7433882c 100644 --- a/compiler/pstatmnt.pas +++ b/compiler/pstatmnt.pas @@ -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 diff --git a/compiler/ptconst.pas b/compiler/ptconst.pas index 284d73337c..27c373d143 100644 --- a/compiler/ptconst.pas +++ b/compiler/ptconst.pas @@ -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 diff --git a/compiler/symdef.pas b/compiler/symdef.pas index b6414a742d..e78ad4314b 100644 --- a/compiler/symdef.pas +++ b/compiler/symdef.pas @@ -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