invokevirtual: implement lazy class loading right
[mate.git] / Mate / MethodPool.hs
index 0b11d3d81bfb5e5a8a11e5f7c574a48b15ddc208..5330ade2e6a5b8d1eac3b3878fd08622a9f91a25 100644 (file)
@@ -18,7 +18,9 @@ import Foreign.C.String
 import JVM.ClassFile
 
 import Harpy
+#ifdef DBG_JIT
 import Harpy.X86Disassembler
+#endif
 
 #ifdef DEBUG
 import Text.Printf
@@ -46,8 +48,7 @@ getMethodEntry signal_from methodtable = do
   let mi'@(MethodInfo method cm sig) =
        case mi of
          (StaticMethod x) -> x
-         (VirtualMethod   _ (MethodInfo methname _ msig)) -> newMi methname msig
-         (InterfaceMethod _ (MethodInfo methname _ msig)) -> newMi methname msig
+         (VirtualCall _ (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
@@ -134,14 +135,17 @@ compileBB rawmethod methodinfo = do
 
   cls <- getClassFile (methClassName methodinfo)
   let ebb = emitFromBB cls rawmethod
-  (_, Right right) <- runCodeGen ebb () ()
+  let cgconfig = defaultCodeGenConfig { codeBufferSize = fromIntegral $ (rawCodeLength rawmethod) * 32 }
+  (_, Right right) <- runCodeGenWithConfig ebb () () cgconfig
 
   let ((entry, _, _, new_tmap), _) = right
   setTrapMap $ tmap `M.union` new_tmap -- prefers elements in tmap
 
   printfJit "generated code of \"%s\" from \"%s\":\n" (toString $ methName methodinfo) (toString $ methClassName methodinfo)
   printfJit "\tstacksize: 0x%04x, locals: 0x%04x\n" (rawStackSize rawmethod) (rawLocals rawmethod)
+#ifdef DBG_JIT
   mapM_ (printfJit "%s\n" . showAtt) (snd right)
+#endif
   printfJit "\n\n"
   -- UNCOMMENT NEXT LINES FOR GDB FUN
   -- if (toString $ methName methodinfo) == "thejavamethodIwant2debug"