packages feed

HJVM-0.1: src/Language/Java/JVM/SignatureParser.hs

module Language.Java.JVM.SignatureParser where

import Data.Functor.Identity
import Text.Parsec


data JSignature=JSignature [String] (Maybe String)
        deriving (Read,Show,Eq,Ord)

parseSignature :: String -> Either ParseError JSignature
parseSignature contents= parse signature "unknown" contents

signature :: ParsecT String u Identity JSignature
signature = do
        char '('
        params<-many typeSignature
        char ')'
        ret<-choice [(do
                t<-typeSignature
                return $ Just t),(do
                char 'V'
                return Nothing)]
        return $ JSignature params ret
        
typeSignature :: ParsecT String u Identity String
typeSignature = choice [(do
                char '['
                ts<-typeSignature
                return "JObj"
                --return (ts++"[]")
                
        ),(do
                char 'L'
                manyTill (anyChar) (try $ char ';')
                return "JObj")
        ,(do
                char 'I'
                return "JInt")
        ,(do
                char 'S'
                return "JShort")
        ,(do
                char 'Z'
                return "JBool")
        ,(do
                char 'B'
                return "JByte")
        ,(do
                char 'D'
                return "JDouble")
        ,(do
                char 'F'
                return "JFloat")
        ,(do
                char 'C'
                return "JChar")
        ,(do
                char 'J'
                return "JLong")
        ]