X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=TestGen.hs;h=69786e995f988129d64905da5aace54b351d769b;hb=5a372b10d0647f9d572b9a70d7512cf653df97e3;hp=c0635252852c296604dfecb364ccefd5a3a7d7a2;hpb=16704d16f8e156bed9ff846c7fddee113f0f4057;p=hs-java.git diff --git a/TestGen.hs b/TestGen.hs index c063525..69786e9 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.Generator.Instructions +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 + setStackSize 1 + aload_ I0 - invokeSpecial "java/lang/Object" initNT + invokeSpecial Java.Lang.object Java.Lang.objectInit i0 RETURN - newMethod [ACC_PUBLIC, ACC_STATIC] "main" [Array Nothing $ ObjectType "java/lang/String"] ReturnsVoid $ do - iconst_5 - invokeStatic "Test" helloNT - i0 RETURN + hello <- newMethod [ACC_PUBLIC, ACC_STATIC] "hello" [IntType] ReturnsVoid $ do + setStackSize 8 - newMethod [ACC_PUBLIC, ACC_STATIC] "hello" [IntType] ReturnsVoid $ do - getStaticField "java/lang/System" outNT + getStaticField Java.Lang.system Java.IO.out loadString "Здравствуй, мир!" - invokeVirtual "java/io/PrintStream" printlnNT - getStaticField "java/lang/System" outNT + invokeVirtual Java.IO.printStream Java.IO.println + getStaticField Java.Lang.system Java.IO.out loadString "Argument: %d\n" iconst_1 - allocArray "java/lang/Object" + allocArray Java.Lang.object dup iconst_0 iload_ I0 - invokeStatic "java/lang/Integer" valueOfNT + invokeStatic Java.Lang.integer Java.Lang.valueOfInteger aastore - invokeVirtual "java/io/PrintStream" printfNT + invokeVirtual Java.IO.printStream Java.IO.printf pop i0 RETURN + newMethod [ACC_PUBLIC, ACC_STATIC] "main" [arrayOf Java.Lang.stringClass] ReturnsVoid $ do + setStackSize 1 + + iconst_5 + invokeStatic "Test" hello + i0 RETURN + + return () + +testClass :: Class Direct testClass = generate "Test" test main = do