some updates.
authorIlya V. Portnov <i.portnov@compassplus.ru>
Fri, 30 Sep 2011 11:03:43 +0000 (17:03 +0600)
committerIlya V. Portnov <i.portnov@compassplus.ru>
Fri, 30 Sep 2011 11:03:43 +0000 (17:03 +0600)
JVM/Generator.hs
Java/Lang.hs
TestGen.hs

index 2ee0240f00726dc24049ffc6c862e54dd0ae1fbd..34b27edb76de907fcfd7f827cde0d90c8eeb24a5 100644 (file)
@@ -134,11 +134,13 @@ endMethod = do
                    currentMethod = Nothing,
                    doneMethods = doneMethods st ++ [method']}
 
-newMethod :: [AccessFlag] -> B.ByteString -> [ArgumentSignature] -> ReturnSignature -> Generate () -> Generate ()
+newMethod :: [AccessFlag] -> B.ByteString -> [ArgumentSignature] -> ReturnSignature -> Generate () -> Generate (NameType Method)
 newMethod flags name args ret gen = do
-  startMethod flags name (MethodSignature args ret)
+  let sig = MethodSignature args ret
+  startMethod flags name sig
   gen
   endMethod
+  return (NameType name sig)
 
 genCode :: GState -> Code
 genCode st = Code {
index bd23f161731cf1557fef812c9e5393368cc052b9..d11f7bd5a715267bd7da3f243100f073d16b85f9 100644 (file)
@@ -26,3 +26,6 @@ system = "java/lang/System"
 objectInit :: NameType Method
 objectInit = NameType "<init>" $ MethodSignature [] ReturnsVoid
 
+valueOfInteger :: NameType Method
+valueOfInteger = NameType "valueOf" $ MethodSignature [IntType] (Returns Java.Lang.integerClass)
+
index 540a7da0d139ae257eea1ba39936679cec3755ce..a42fa052c64ee8e058ad68b17c4707dc13eb3315 100644 (file)
@@ -15,9 +15,6 @@ import qualified Java.IO
 hello :: NameType Method
 hello = NameType "hello" $ MethodSignature [IntType] ReturnsVoid
 
-valueOf :: NameType Method
-valueOf = NameType "valueOf" $ MethodSignature [IntType] (Returns Java.Lang.integerClass)
-
 test :: Generate ()
 test = do
   newMethod [ACC_PUBLIC] "<init>" [] ReturnsVoid $ do
@@ -25,12 +22,7 @@ test = do
       invokeSpecial Java.Lang.object Java.Lang.objectInit
       i0 RETURN
 
-  newMethod [ACC_PUBLIC, ACC_STATIC] "main" [Array Nothing Java.Lang.stringClass] ReturnsVoid $ do
-      iconst_5
-      invokeStatic "Test" hello
-      i0 RETURN
-
-  newMethod [ACC_PUBLIC, ACC_STATIC] "hello" [IntType] ReturnsVoid $ do
+  hello <- newMethod [ACC_PUBLIC, ACC_STATIC] "hello" [IntType] ReturnsVoid $ do
       getStaticField Java.Lang.system Java.IO.out
       loadString "Здравствуй, мир!"
       invokeVirtual Java.IO.printStream Java.IO.println
@@ -41,12 +33,19 @@ test = do
       dup
       iconst_0
       iload_ I0
-      invokeStatic Java.Lang.integer valueOf
+      invokeStatic Java.Lang.integer Java.Lang.valueOfInteger
       aastore
       invokeVirtual Java.IO.printStream Java.IO.printf
       pop
       i0 RETURN
 
+  newMethod [ACC_PUBLIC, ACC_STATIC] "main" [Array Nothing Java.Lang.stringClass] ReturnsVoid $ do
+      iconst_5
+      invokeStatic "Test" hello
+      i0 RETURN
+
+  return ()
+
 testClass = generate "Test" test
 
 main = do