classloading: load classfile on demand
[mate.git] / Mate.hs
diff --git a/Mate.hs b/Mate.hs
index b787c260d3a432a72bb9de885e8f5f6b59a5a673..1acc64d48940fef9221a1745bd9016e517e03735 100644 (file)
--- a/Mate.hs
+++ b/Mate.hs
@@ -2,15 +2,21 @@
 module Main where
 
 import System.Environment
+import Data.Char
+import Data.String.Utils
+import Data.List
+import qualified Data.ByteString.Lazy as B
 
 import Text.Printf
 
+import JVM.ClassFile
 import JVM.Converter
 import JVM.Dump
 
 import Mate.BasicBlocks
 import Mate.X86CodeGen
 import Mate.MethodPool
+import Mate.Utilities
 
 main ::  IO ()
 main = do
@@ -25,8 +31,15 @@ main = do
       printMapBB hmap
       case hmap of
         Just hmap' -> do
-          entry <- compileBB hmap' cls "main"
-          printf "executing `main' now:\n"
-          executeFuncPtr entry
+          let methods = classMethods cls; methods :: [Method Resolved]
+          let idx = findIndex (\x -> (methodName x) == "main") methods
+          case idx of
+            Just idx' -> do
+              let (Just m) = find (\x -> (methodName x) == "main") methods
+              let bclspath = B.pack $ map (fromIntegral . ord) (replace ".class" "" clspath)
+              entry <- compileBB hmap' (MethodInfo "main" bclspath (methodSignature m) (fromIntegral idx'))
+              printf "executing `main' now:\n"
+              executeFuncPtr entry
+            Nothing -> error "main not found"
         Nothing -> error "main not found"
     _ -> error "Usage: mate <class-file>"