Browse Source

bugfix in virtual call

Nicolas Cannasse 9 years ago
parent
commit
39b3f4db63
1 changed files with 3 additions and 1 deletions
  1. 3 1
      genhl.ml

+ 3 - 1
genhl.ml

@@ -4177,7 +4177,9 @@ let interp code =
 					| VObj o as obj ->
 						(try
 							let m = PMap.find name o.oproto.pclass.pfunctions in
-							set r (fcall functions.(m) (obj :: List.map get (List.tl rl)))
+							let fret, fargs = (match functions.(m) with FFun { ftype = HFun(args,t) } -> t, args | _ -> assert false) in
+							let v = fcall functions.(m) (obj :: List.map2 (fun r t -> dyn_cast (get r) (rtype r) t) (List.tl rl) (List.tl fargs)) in
+							set r (dyn_cast v fret (rtype r))
 						with Not_found ->
 							assert false)
 					| VDynObj _ ->