ソースを参照

* 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 -

Jonas Maebe 14 年 前
コミット
2222f2c44b

+ 3 - 3
compiler/dbgdwarf.pas

@@ -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));

+ 5 - 5
compiler/defcmp.pas

@@ -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 }
-                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
                  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

+ 1 - 1
compiler/defutil.pas

@@ -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);

+ 9 - 10
compiler/htypechk.pas

@@ -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 }
-                 { dereferencing                           }
+                 { implicit pointer object types result in 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;

+ 8 - 8
compiler/nadd.pas

@@ -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 }
-         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
           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 }
-         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
           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

+ 2 - 2
compiler/ncgmem.pas

@@ -291,8 +291,8 @@ implementation
          if codegenerror then
          if codegenerror then
            exit;
            exit;
          paraloc1.init;
          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
            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));

+ 2 - 2
compiler/nmem.pas

@@ -687,8 +687,8 @@ implementation
          if codegenerror then
          if codegenerror then
           exit;
           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
            expectloc:=LOC_REFERENCE
          else
          else
            begin
            begin

+ 1 - 1
compiler/nutils.pas

@@ -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;

+ 1 - 1
compiler/pdecl.pas

@@ -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

+ 1 - 1
compiler/pexpr.pas

@@ -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;

+ 2 - 2
compiler/pstatmnt.pas

@@ -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 }
-                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);
                                   (p.resultdef.typ = classrefdef);
                 if hasimplicitderef then
                 if hasimplicitderef then
                   hdef:=p.resultdef
                   hdef:=p.resultdef

+ 2 - 2
compiler/ptconst.pas

@@ -1275,8 +1275,8 @@ implementation
               exit;
               exit;
             end;
             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
             begin
               n:=comp_expr(true,false);
               n:=comp_expr(true,false);
               if n.nodetype<>niln then
               if n.nodetype<>niln then

+ 3 - 3
compiler/symdef.pas

@@ -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