Browse Source

+ Implemented (hopefully correct) DoSuperMethodA()

git-svn-id: trunk@1832 -
Károly Balogh 19 years ago
parent
commit
548bf2f29f
1 changed files with 25 additions and 0 deletions
  1. 25 0
      rtl/morphos/aboxlib.pas

+ 25 - 0
rtl/morphos/aboxlib.pas

@@ -23,6 +23,9 @@ interface
 function DoMethod(obj : longword; msg : array of LongWord): longword;
 function DoMethodA(obj : longword; msg1 : Pointer): longword; assembler;
 
+function DoSuperMethod(class_: longword; obj : longword; msg : array of LongWord): longword;
+function DoSuperMethodA(class_: longword; obj : longword; msg1 : Pointer): longword; assembler;
+
 implementation
 
 function DoMethodA(obj : longword; msg1 : Pointer): longword; assembler;
@@ -47,4 +50,26 @@ begin
   DoMethod:=DoMethodA(obj, @msg);
 end;
 
+function DoSuperMethodA(class_: longword; obj : longword; msg1 : Pointer): longword; assembler;
+asm
+  mflr r31
+
+  stw r3,32(r2)
+  stw r5,36(r2)
+  stw r4,40(r2)
+
+  lwz r11,104(r2)
+  lwz r9,24(r3)
+  lwz r3,8(r9)
+  mtlr r11
+  blrl
+
+  mtlr r31
+end ['R31'];
+
+function DoSuperMethod(class_: longword; obj : longword; msg : array of LongWord): longword;
+begin
+  DoSuperMethod:=DoSuperMethodA(class_, obj, @msg);
+end;
+
 end.