summaryrefslogtreecommitdiff
path: root/examples/gfcc/CleanJVM.hs
diff options
context:
space:
mode:
authorjohn.j.camilleri <john.j.camilleri@chalmers.se>2013-09-16 07:17:27 +0000
committerjohn.j.camilleri <john.j.camilleri@chalmers.se>2013-09-16 07:17:27 +0000
commitf5461eb3d4eb2605b546a4ed202c12bcdaa1f4e4 (patch)
tree946c9e8542b8e8271b6b529a95c0400fa6613cb4 /examples/gfcc/CleanJVM.hs
parent8e1c6cca407c82fc09569d80c231b8d256735989 (diff)
Remove contribs and examples
Everything has now been moved to a separate repository at https://github.com/GrammaticalFramework/gf-contrib The contents of the examples folder are build during SetupWeb
Diffstat (limited to 'examples/gfcc/CleanJVM.hs')
-rw-r--r--examples/gfcc/CleanJVM.hs59
1 files changed, 0 insertions, 59 deletions
diff --git a/examples/gfcc/CleanJVM.hs b/examples/gfcc/CleanJVM.hs
deleted file mode 100644
index 7c4c1bb54..000000000
--- a/examples/gfcc/CleanJVM.hs
+++ /dev/null
@@ -1,59 +0,0 @@
-module Main where
-
-import Char
-import System
-
---- translation from Symbolic JVM to real Jasmin code
-
-main :: IO ()
-main = do
- jvm:src:_ <- getArgs
- s <- readFile jvm
- let cls = takeWhile (/='.') src
- let obj = cls ++ ".j"
- writeFile obj $ boilerplate cls
- appendFile obj $ mkJVM cls s
- putStrLn $ "wrote file " ++ obj
- system $ "java -jar jasmin.jar " ++ obj
- return ()
-
-mkJVM :: String -> String -> String
-mkJVM cls = unlines . reverse . fst . foldl trans ([],([],0)) . liness where
- trans (code,(env,v)) s = case words s of
- ".method":p:s:f:ns
- | f == "main" ->
- (".method public static main([Ljava/lang/String;)V":code,([],1))
- | otherwise ->
- (unwords [".method",p,s, f ++ glue ns] : code,([],0))
- "alloc":t:x:_ -> (("; " ++ s):code, ((x,v):env, v + size t))
- ".limit":"locals":ns -> chCode (".limit locals " ++ show (length ns + 1))
- "runtime":f:ns -> chCode $ "invokestatic " ++ "runtime/" ++ f ++ glue ns
- "static":f:ns -> chCode $ "invokestatic " ++ cls ++ "/" ++ f ++ glue ns
- "alloc":ns -> chCode $ "; " ++ s
- ins:x:_ | symb ins -> chCode $ ins ++ " " ++ look x
- "goto":ns -> chCode $ "goto " ++ glue ns
- "ifeq":ns -> chCode $ "ifeq " ++ glue ns
- "label":ns -> chCode $ glue ns ++ ":"
- ";":[] -> chCode ""
- _ -> chCode s
- where
- chCode c = (c:code,(env,v))
- look x = maybe (error $ x ++ show env) show $ lookup x env
- glue = concat --init . concat
- symb = flip elem ["load","store"] . tail
- size t = case t of
- "d" -> 2
- _ -> 1
- liness = lines . map (\c -> if c==';' then '\n' else c)
-
-
-boilerplate :: String -> String
-boilerplate cls = unlines [
- ".class public " ++ cls,
- ".super java/lang/Object",
- ".method public <init>()V",
- "aload_0",
- "invokenonvirtual java/lang/Object/<init>()V",
- "return",
- ".end method"
- ]