Browse Source

* tobjectdef.vmtmethodoffset updated to take into account the current i8086 memory model code pointer size

git-svn-id: trunk@25195 -
nickysn 12 years ago
parent
commit
259bb5421e
1 changed files with 14 additions and 4 deletions
  1. 14 4
      compiler/symdef.pas

+ 14 - 4
compiler/symdef.pas

@@ -6235,27 +6235,37 @@ implementation
 
 
 
 
     function tobjectdef.vmtmethodoffset(index:longint):longint;
     function tobjectdef.vmtmethodoffset(index:longint):longint;
+      var
+        codeptrsize: Integer;
       begin
       begin
+{$ifdef i8086}
+        if current_settings.x86memorymodel in x86_far_code_models then
+          codeptrsize:=4
+        else
+          codeptrsize:=2;
+{$else i8086}
+        codeptrsize:=sizeof(pint);
+{$endif i8086}
         { for offset of methods for classes, see rtl/inc/objpash.inc }
         { for offset of methods for classes, see rtl/inc/objpash.inc }
         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+10)*sizeof(pint)+2*sizeof(pint);
+          vmtmethodoffset:=index*codeptrsize+10*sizeof(pint)+2*sizeof(pint);
         odt_helper,
         odt_helper,
         odt_objcclass,
         odt_objcclass,
         odt_objcprotocol:
         odt_objcprotocol:
           vmtmethodoffset:=0;
           vmtmethodoffset:=0;
         odt_interfacecom,odt_interfacecorba,odt_dispinterface:
         odt_interfacecom,odt_interfacecorba,odt_dispinterface:
-          vmtmethodoffset:=index*sizeof(pint);
+          vmtmethodoffset:=index*codeptrsize;
         odt_javaclass,
         odt_javaclass,
         odt_interfacejava:
         odt_interfacejava:
           { invalid }
           { invalid }
           vmtmethodoffset:=-1;
           vmtmethodoffset:=-1;
         else
         else
 {$ifdef WITHDMT}
 {$ifdef WITHDMT}
-          vmtmethodoffset:=(index+4)*sizeof(pint);
+          vmtmethodoffset:=index*codeptrsize+4*sizeof(pint);
 {$else WITHDMT}
 {$else WITHDMT}
-          vmtmethodoffset:=(index+3)*sizeof(pint);
+          vmtmethodoffset:=index*codeptrsize+3*sizeof(pint);
 {$endif WITHDMT}
 {$endif WITHDMT}
         end;
         end;
       end;
       end;