@@ -158,6 +158,7 @@ function sameDimensions (m1, m2 : TArrayObject) : boolean;
158158procedure TArrayMethods.getLength (vm : TObject);
159159var s : TArrayObject;
160160 nArgs, d : integer;
161+ md : TMethodDetails;
161162begin
162163 d := 0 ;
163164 nArgs := TVM (vm).popInteger;
@@ -167,8 +168,8 @@ procedure TArrayMethods.getLength (vm : TObject);
167168 if nArgs > 1 then
168169 raise ERuntimeException.Create(' Too many arguments passed to len()' );
169170
170- TVM (vm).decStackTop; // Dump the object method
171- s := TVM (vm).popArray ;
171+ md := TVM (vm).popMethodDetails;
172+ s := TArrayObject (md.self) ;
172173
173174 if nArgs = 0 then
174175 TVM (vm).push(s.getNumberOfElements())
@@ -189,9 +190,10 @@ procedure TArrayMethods.getShape (vm : TObject);
189190var s : TArrayObject;
190191 r : TListObject;
191192 i : integer;
193+ md : TMethodDetails;
192194begin
193- TVM (vm).decStackTop; // Dump the object method
194- s := TVM (vm).popArray ;
195+ md := TVM (vm).popMethodDetails;
196+ s := TArrayObject (md.self) ;
195197
196198 r := TListObject.Create(length (s.dim));
197199 for i := 0 to length (s.dim) - 1 do
@@ -206,19 +208,21 @@ procedure TArrayMethods.getShape (vm : TObject);
206208
207209procedure TArrayMethods.getNumDim (vm: TObject);
208210var s :TArrayObject;
211+ md : TMethodDetails;
209212begin
210- TVM (vm).decStackTop; // Dump the object method
211- s := TVM (vm).popArray ;
213+ md := TVM (vm).popMethodDetails;
214+ s := TArrayObject (md.self) ;
212215
213216 TVM (vm).push (length (s.dim));
214217end ;
215218
216219
217220procedure TArrayMethods.getNumRows (vm: TObject);
218221var s :TArrayObject;
222+ md : TMethodDetails;
219223begin
220- TVM (vm).decStackTop; // Dump the object method
221- s := TVM (vm).popArray ;
224+ md := TVM (vm).popMethodDetails;
225+ s := TArrayObject (md.self) ;
222226
223227 if s.getNumDimensions() <= 2 then
224228 TVM (vm).push (s.dim[0 ])
@@ -229,9 +233,10 @@ procedure TArrayMethods.getNumRows (vm: TObject);
229233
230234procedure TArrayMethods.getNumCols (vm: TObject);
231235var s :TArrayObject;
236+ md : TMethodDetails;
232237begin
233- TVM (vm).decStackTop; // Dump the object method
234- s := TVM (vm).popArray ;
238+ md := TVM (vm).popMethodDetails;
239+ s := TArrayObject (md.self) ;
235240
236241 if s.getNumDimensions() = 2 then
237242 TVM (vm).push (s.dim[1 ])
@@ -246,11 +251,12 @@ procedure TArrayMethods.appendRow (vm : TObject);
246251 target : TArrayObject;
247252 i, j : integer;
248253 sRows: integer;
254+ md : TMethodDetails;
249255begin
250256 appendee := TVM (vm).popArray;
251257
252- TVM (vm).decStackTop; // Dump the object method
253- s := TVM (vm).popArray ;
258+ md := TVM (vm).popMethodDetails;
259+ s := TArrayObject (md.self) ;
254260
255261 if (s.getNumDimensions() = 2 ) and (appendee.getNumDimensions() = 2 ) then
256262 begin
@@ -275,6 +281,7 @@ procedure TArrayMethods.appendRow (vm : TObject);
275281
276282procedure TArrayMethods.appendCol (vm : TObject);
277283var s :TArrayObject;
284+ md : TMethodDetails;
278285begin
279286
280287end ;
@@ -284,9 +291,11 @@ procedure TArrayMethods.getTranspose (vm : TObject);
284291var s, tmp :TArrayObject;
285292 i, j : integer;
286293 r, c : integer;
294+ md : TMethodDetails;
287295begin
288- TVM (vm).decStackTop; // Dump the object method
289- s := TVM (vm).popArray; // Object itself
296+ md := TVM (vm).popMethodDetails;
297+ s := TArrayObject (md.self);
298+
290299 r := s.dim[0 ];
291300 c := s.dim[1 ];
292301
@@ -304,9 +313,11 @@ procedure TArrayMethods.getSqr (vm : TObject);
304313var i : integer;
305314 s1, s2 : TArrayObject;
306315 len : integer;
316+ md : TMethodDetails;
307317begin
308- TVM (vm).decStackTop; // Dump the object method
309- s1 := TVM (vm).popArray;
318+ md := TVM (vm).popMethodDetails;
319+ s1 := TArrayObject (md.self);
320+
310321 s2 := s1.clone;
311322
312323 len := s1.getNumberOfElements - 1 ;
@@ -320,10 +331,12 @@ procedure TArrayMethods.add (vm : TObject);
320331var i, n : integer;
321332 s1, s2 : TArrayObject;
322333 argument : TArrayObject;
334+ md : TMethodDetails;
323335begin
324336 argument := TVM (vm).popArray;
325- TVM (vm).decStackTop; // Dump the object method
326- s1 := TVM (vm).popArray;
337+
338+ md := TVM (vm).popMethodDetails;
339+ s1 := TArrayObject (md.self);
327340 s2 := s1.clone;
328341
329342 if sameDimensions (s1, argument) then
@@ -342,10 +355,12 @@ procedure TArrayMethods.sub (vm : TObject);
342355var i, n : integer;
343356 s1, s2 : TArrayObject;
344357 argument : TArrayObject;
358+ md : TMethodDetails;
345359begin
346360 argument := TVM (vm).popArray;
347- TVM (vm).decStackTop; // Dump the object method
348- s1 := TVM (vm).popArray;
361+
362+ md := TVM (vm).popMethodDetails;
363+ s1 := TArrayObject (md.self);
349364 s2 := s1.clone;
350365
351366 if sameDimensions (s1, argument) then
@@ -364,9 +379,10 @@ procedure TArrayMethods.getMax (vm : TObject);
364379var i : integer;
365380 s1 : TArrayObject;
366381 max : double;
382+ md : TMethodDetails;
367383begin
368- TVM (vm).decStackTop; // Dump the object method
369- s1 := TVM (vm).popArray ;
384+ md := TVM (vm).popMethodDetails;
385+ s1 := TArrayObject (md.self) ;
370386
371387 TVM (vm).push (TArrayObject.getMax(s1));
372388end ;
@@ -376,9 +392,10 @@ procedure TArrayMethods.getMin (vm : TObject);
376392var i : integer;
377393 s1 : TArrayObject;
378394 min : double;
395+ md : TMethodDetails;
379396begin
380- TVM (vm).decStackTop; // Dump the object method
381- s1 := TVM (vm).popArray ;
397+ md := TVM (vm).popMethodDetails;
398+ s1 := TArrayObject (md.self) ;
382399
383400 TVM (vm).push (TArrayObject.getMin(s1));
384401end ;
@@ -387,9 +404,11 @@ procedure TArrayMethods.getMin (vm : TObject);
387404procedure TArrayMethods.getTrunc (vm : TObject);
388405var s, target : TArrayObject;
389406 i : integer;
407+ md : TMethodDetails;
390408begin
391- TVM (vm).decStackTop; // Dump the object method
392- s := TVM (vm).popArray;
409+ md := TVM (vm).popMethodDetails;
410+ s := TArrayObject (md.self);
411+
393412 target := s.clone;
394413
395414 for i := 0 to s.getNumberOfElements() - 1 do
0 commit comments