refactor: store amount of arguments of a method in RawMethod
[mate.git] / Mate / MethodPool.hs
index 508ff117c6365961b3a7ffb3f4f42fc8b0569be4..5f787a25afad127167897d51381da0350dab4e39 100644 (file)
@@ -44,12 +44,12 @@ getMethodEntry signal_from methodtable = do
   let w32_from = fromIntegral signal_from
   let mi = tmap M.! w32_from
   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
-          _ -> error "getMethodEntry: no TrapCause found. abort."
-        where newMi mn = MethodInfo mn (vmap M.! fromIntegral methodtable)
+       case mi of
+         (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.
@@ -74,13 +74,10 @@ getMethodEntry signal_from methodtable = do
                 setMethodMap $ M.insert mi' nf mmap
                 return nf
               else do
-                hmap <- parseMethod cls' method sig
-                case hmap of
-                  Just hmap' -> do
-                    entry <- compileBB hmap' (MethodInfo method (thisClass cls') sig)
-                    addMethodRef entry mi' clsnames
-                    return $ fromIntegral entry
-                  Nothing -> error $ show method ++ " not found. abort"
+                rawmethod <- parseMethod cls' method sig
+                entry <- compileBB rawmethod (MethodInfo method (thisClass cls') sig)
+                addMethodRef entry mi' clsnames
+                return $ fromIntegral entry
         Nothing -> error $ show method ++ " not found. abort"
     Just w32 -> return w32
   return $ fromIntegral entryaddr
@@ -96,10 +93,10 @@ lookupMethodRecursive name sig clsnames cls =
         supercl <- getClassFile (superClass cls)
         lookupMethodRecursive name sig nextclsn supercl
   where
-  res = lookupMethodSig name sig cls
-  thisname = thisClass cls
-  nextclsn :: [B.ByteString]
-  nextclsn = thisname:clsnames
+    res = lookupMethodSig name sig cls
+    thisname = thisClass cls
+    nextclsn :: [B.ByteString]
+    nextclsn = thisname:clsnames
 
 -- TODO(bernhard): UBERHAX.  ghc patch?
 foreign import ccall safe "lookupSymbol"
@@ -107,13 +104,13 @@ foreign import ccall safe "lookupSymbol"
 
 loadNativeFunction :: String -> IO Word32
 loadNativeFunction sym = do
-        _ <- loadRawObject "ffi/native.o"
-        -- TODO(bernhard): WTF
-        resolveObjs (return ())
-        ptr <- withCString sym c_lookupSymbol
-        if ptr == nullPtr
-          then error $ "dyn. loading of \"" ++ sym ++ "\" failed."
-          else return $ fromIntegral $ ptrToIntPtr ptr
+  _ <- loadRawObject "ffi/native.o"
+  -- TODO(bernhard): WTF
+  resolveObjs (return ())
+  ptr <- withCString sym c_lookupSymbol
+  if ptr == nullPtr
+    then error $ "dyn. loading of \"" ++ sym ++ "\" failed."
+    else return $ fromIntegral $ ptrToIntPtr ptr
 
 -- t_01 :: IO ()
 -- t_01 = do
@@ -136,7 +133,7 @@ compileBB rawmethod methodinfo = do
   tmap <- getTrapMap
 
   cls <- getClassFile (methClassName methodinfo)
-  let ebb = emitFromBB (methName methodinfo) (methSignature methodinfo) cls rawmethod
+  let ebb = emitFromBB cls rawmethod
   (_, Right right) <- runCodeGen ebb () ()
 
   let ((entry, _, _, new_tmap), _) = right