1 {-# LANGUAGE OverloadedStrings #-}
3 import qualified Data.ByteString.Lazy as B
11 import qualified Java.Lang
12 import qualified Java.IO
17 -- Add current directory (with Hello.class) to ClassPath
20 -- Load method signature: Hello.hello()
21 helloJava <- getClassMethod "./Hello" "hello"
23 -- Initializer method. Just calls java.lang.Object.<init>
24 newMethod [ACC_PUBLIC] "<init>" [] ReturnsVoid $ do
28 invokeSpecial Java.Lang.object Java.Lang.objectInit
31 -- Declare hello() method and bind it's signature to hello.
32 hello <- newMethod [ACC_PUBLIC, ACC_STATIC] "hello" [IntType] ReturnsVoid $ do
35 getStaticField Java.Lang.system Java.IO.out
36 loadString "Здравствуй, мир!"
37 invokeVirtual Java.IO.printStream Java.IO.println
38 getStaticField Java.Lang.system Java.IO.out
39 loadString "Argument: %d\n"
41 allocArray Java.Lang.object
45 invokeStatic Java.Lang.integer Java.Lang.valueOfInteger
47 invokeVirtual Java.IO.printStream Java.IO.printf
49 invokeStatic "Hello" helloJava
54 newMethod [ACC_PUBLIC, ACC_STATIC] "main" [arrayOf Java.Lang.stringClass] ReturnsVoid $ do
58 -- Call previously declared method
59 invokeStatic "Test" hello
66 testClass <- generate [] "Test" test
67 B.writeFile "Test.class" (encodeClass testClass)