Misc minor updates.
[hs-java.git] / TestGen.hs
1 {-# LANGUAGE OverloadedStrings #-}
2
3 import qualified Data.ByteString.Lazy as B
4
5 import JVM.ClassFile
6 import JVM.Converter
7 import JVM.Assembler
8 import JVM.Builder
9
10 import qualified Java.Lang
11 import qualified Java.IO
12
13 test :: Generate ()
14 test = do
15   newMethod [ACC_PUBLIC] "<init>" [] ReturnsVoid $ do
16       aload_ I0
17       invokeSpecial Java.Lang.object Java.Lang.objectInit
18       i0 RETURN
19
20   hello <- newMethod [ACC_PUBLIC, ACC_STATIC] "hello" [IntType] ReturnsVoid $ do
21       getStaticField Java.Lang.system Java.IO.out
22       loadString "Здравствуй, мир!"
23       invokeVirtual Java.IO.printStream Java.IO.println
24       getStaticField Java.Lang.system Java.IO.out
25       loadString "Argument: %d\n"
26       iconst_1
27       allocArray Java.Lang.object
28       dup
29       iconst_0
30       iload_ I0
31       invokeStatic Java.Lang.integer Java.Lang.valueOfInteger
32       aastore
33       invokeVirtual Java.IO.printStream Java.IO.printf
34       pop
35       i0 RETURN
36
37   newMethod [ACC_PUBLIC, ACC_STATIC] "main" [arrayOf Java.Lang.stringClass] ReturnsVoid $ do
38       iconst_5
39       invokeStatic "Test" hello
40       i0 RETURN
41
42   return ()
43
44 testClass ::  Class Resolved
45 testClass = generate "Test" test
46
47 main = do
48   B.writeFile "Test.class" (encodeClass testClass)
49