X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=hs-java.git;a=blobdiff_plain;f=TestGen.hs;h=886751ddc2eb81e9b9a3fb263409aa1508829113;hp=14c91f8c95df9f0456638b8bad77ae5ca9504e82;hb=9e0a8d2e1db1f7d06969879a901374ca560f0d21;hpb=d290a2ae10775e0ebbcfd49d36502af9ee73d4a3 diff --git a/TestGen.hs b/TestGen.hs index 14c91f8..886751d 100644 --- a/TestGen.hs +++ b/TestGen.hs @@ -2,61 +2,52 @@ import qualified Data.ByteString.Lazy as B -import JVM.Types import JVM.ClassFile import JVM.Converter import JVM.Assembler -import JVM.Generator -import JVM.Dump +import JVM.Builder -initNT :: NameType Method -initNT = NameType "" $ MethodSignature [] ReturnsVoid - -helloNT :: NameType Method -helloNT = NameType "hello" $ MethodSignature [IntType] ReturnsVoid - -printlnNT :: NameType Method -printlnNT = NameType "println" $ MethodSignature [ObjectType "java/lang/String"] ReturnsVoid - -outNT :: NameType Field -outNT = NameType "out" $ ObjectType "java/io/PrintStream" - -valueOfNT :: NameType Method -valueOfNT = NameType "valueOf" $ MethodSignature [IntType] (Returns $ ObjectType "java/lang/Integer") - -printfNT :: NameType Method -printfNT = NameType "printf" $ MethodSignature [ObjectType "java/lang/String", - Array Nothing $ ObjectType "java/lang/Object"] (Returns $ ObjectType "java/io/PrintStream") +import qualified Java.Lang +import qualified Java.IO test :: Generate () test = do newMethod [ACC_PUBLIC] "" [] ReturnsVoid $ do - i0 $ ALOAD_ I0 - i1 INVOKESPECIAL (CMethod "java/lang/Object" initNT) + setStackSize 1 + + aload_ I0 + invokeSpecial Java.Lang.object Java.Lang.objectInit i0 RETURN - newMethod [ACC_PUBLIC, ACC_STATIC] "main" [Array Nothing $ ObjectType "java/lang/String"] ReturnsVoid $ do - i0 ICONST_5 - i1 INVOKESTATIC (CMethod "Test" helloNT) + hello <- newMethod [ACC_PUBLIC, ACC_STATIC] "hello" [IntType] ReturnsVoid $ do + setStackSize 8 + + getStaticField Java.Lang.system Java.IO.out + loadString "Здравствуй, мир!" + invokeVirtual Java.IO.printStream Java.IO.println + getStaticField Java.Lang.system Java.IO.out + loadString "Argument: %d\n" + iconst_1 + allocArray Java.Lang.object + dup + iconst_0 + iload_ I0 + invokeStatic Java.Lang.integer Java.Lang.valueOfInteger + aastore + invokeVirtual Java.IO.printStream Java.IO.printf + pop i0 RETURN - newMethod [ACC_PUBLIC, ACC_STATIC] "hello" [IntType] ReturnsVoid $ do - i1 GETSTATIC (CField "java/lang/System" outNT) - i8 LDC1 (CString "Здравствуй, мир!") - i1 INVOKEVIRTUAL (CMethod "java/io/PrintStream" printlnNT) - i1 GETSTATIC (CField "java/lang/System" outNT) - i8 LDC1 (CString "Argument: %d\n") - i0 ICONST_1 - i1 ANEWARRAY (CClass "java/lang/Object") - i0 DUP - i0 ICONST_0 - i0 (ILOAD_ I0) - i1 INVOKESTATIC (CMethod "java/lang/Integer" valueOfNT) - i0 AASTORE - i1 INVOKEVIRTUAL (CMethod "java/io/PrintStream" printfNT) - i0 POP + newMethod [ACC_PUBLIC, ACC_STATIC] "main" [arrayOf Java.Lang.stringClass] ReturnsVoid $ do + setStackSize 1 + + iconst_5 + invokeStatic "Test" hello i0 RETURN + return () + +testClass :: Class Resolved testClass = generate "Test" test main = do