traps: don't delete entry after consuming it
[mate.git] / Mate / MethodPool.hs
index 2a3cfed4364c3eb936b2217b68eb8440246b0c5b..f7038f3b1e1afdaa640d274ba1c5e2c39a4a954c 100644 (file)
@@ -45,12 +45,15 @@ getMethodEntry signal_from methodtable = do
   let mi = tmap M.! w32_from
   let mi'@(MethodInfo method cm sig) =
         case mi of
-          (MI x) -> x
-          (VI  _(MethodInfo methname _ msig)) ->
-              MethodInfo methname (vmap M.! fromIntegral methodtable) msig
-          (II _ (MethodInfo methname _ msig)) ->
-              MethodInfo methname (vmap M.! fromIntegral methodtable) msig
-          _ -> error "getMethodEntry: no trapInfo. abort."
+          (StaticMethod x) -> x
+          (VirtualMethod   _ (MethodInfo methname _ msig)) -> newMi methname msig
+          (InterfaceMethod _ (MethodInfo methname _ msig)) -> newMi methname msig
+          _ -> error "getMethodEntry: no TrapCause found. abort."
+        where newMi mn = MethodInfo mn (vmap M.! fromIntegral methodtable)
+  -- bernhard (TODO): doesn't work with gnu classpath at some point. didn't
+  --                  figured out the problem yet :/ therefore, I have no
+  --                  testcase for replaying the situation.
+  -- setTrapMap $ M.delete w32_from tmap
   case M.lookup mi' mmap of
     Nothing -> do
       cls <- getClassFile cm