global map hack: refactor
[mate.git] / Mate / ClassPool.hs
index d14c2f30c61a5eda67982866fc3cf136f69a767f..ccfe1b3afc7b4bad72e817e09479582cfacc0bc3 100644 (file)
@@ -30,5 +30,13 @@ import Mate.Utilities
 
 getClassFile :: B.ByteString -> IO (Class Resolved)
 getClassFile path = do
-  let rpath = toString $ path `B.append` ".class"
-  parseClassFile rpath
+  ptr_classmap <- get_classmap
+  class_map <- ptr2classmap ptr_classmap
+  case M.lookup path class_map of
+    Nothing -> do
+      let rpath = toString $ path `B.append` ".class"
+      cfile <- parseClassFile rpath
+      let class_map' = M.insert path (ClassInfo path cfile) class_map
+      classmap2ptr class_map' >>= set_classmap
+      return cfile
+    Just (ClassInfo name cfs) -> return cfs