浏览代码

* i8086 far data memory model fixes in tobjectdef.vmtmethodoffset

git-svn-id: trunk@27539 -
nickysn 11 年之前
父节点
当前提交
902d118ec8
共有 1 个文件被更改,包括 4 次插入3 次删除
  1. 4 3
      compiler/symdef.pas

+ 4 - 3
compiler/symdef.pas

@@ -6283,7 +6283,7 @@ implementation
         case objecttype of
         case objecttype of
         odt_class:
         odt_class:
           { the +2*sizeof(pint) is size and -size }
           { the +2*sizeof(pint) is size and -size }
-          vmtmethodoffset:=index*voidcodepointertype.size+10*sizeof(pint)+2*sizeof(pint);
+          vmtmethodoffset:=index*voidcodepointertype.size+10*voidpointertype.size+2*sizeof(pint);
         odt_helper,
         odt_helper,
         odt_objcclass,
         odt_objcclass,
         odt_objcprotocol:
         odt_objcprotocol:
@@ -6295,10 +6295,11 @@ implementation
           { invalid }
           { invalid }
           vmtmethodoffset:=-1;
           vmtmethodoffset:=-1;
         else
         else
+          { the +2*sizeof(pint) is size and -size }
 {$ifdef WITHDMT}
 {$ifdef WITHDMT}
-          vmtmethodoffset:=index*voidcodepointertype.size+4*sizeof(pint);
+          vmtmethodoffset:=index*voidcodepointertype.size+2*voidpointertype.size+2*sizeof(pint);
 {$else WITHDMT}
 {$else WITHDMT}
-          vmtmethodoffset:=index*voidcodepointertype.size+3*sizeof(pint);
+          vmtmethodoffset:=index*voidcodepointertype.size+1*voidpointertype.size+2*sizeof(pint);
 {$endif WITHDMT}
 {$endif WITHDMT}
         end;
         end;
       end;
       end;