packages feed

paragon 0.1.7 → 0.1.8

raw patch · 2 files changed

+56/−1 lines, 2 files

Files

paragon.cabal view
@@ -1,5 +1,5 @@ Name:                   paragon-Version:                0.1.7+Version:                0.1.8 License:                BSD3 License-File:           LICENSE Author:                 Niklas Broberg@@ -50,6 +50,7 @@                         Language.Java.Paragon.TypeCheck.Uniq,                         Language.Java.Paragon.QuasiQuoter,                         Language.Java.Paragon.Compile,+                        Language.Java.Paragon.PiGeneration,                         Language.Java.Paragon.Verbosity    Hs-source-dirs:       src@@ -82,6 +83,7 @@                         Language.Java.Paragon.TypeCheck.Uniq,                         Language.Java.Paragon.QuasiQuoter,                         Language.Java.Paragon.Compile,+                        Language.Java.Paragon.PiGeneration,                         Language.Java.Paragon.Verbosity  
+ src/Language/Java/Paragon/PiGeneration.hs view
@@ -0,0 +1,53 @@+{-# LANGUAGE QuasiQuotes #-}+module Language.Java.Paragon.PiGeneration where++import Language.Java.Paragon.Syntax+import Control.Applicative+import Language.Java.Paragon.QuasiQuoter++piTransform :: CompilationUnit -> CompilationUnit +piTransform  = transformCompilationUnit+--for generating Pi there should be a package name+-- no imports+-- one type for each compilationUnit since the execution is for one class but we can transform without considering that condition+transformCompilationUnit :: CompilationUnit -> CompilationUnit+transformCompilationUnit (CompilationUnit mpDecl _  tdecls)+  = CompilationUnit mpDecl []  (transformTypeDecl<$>tdecls)+----------------+transformTypeDecl :: TypeDecl -> TypeDecl+transformTypeDecl (InterfaceTypeDecl (InterfaceDecl mods iden tparams refts ib))+  =  ClassTypeDecl (ClassDecl mods iden tparams Nothing refts (transformInterfaceBody ib)) -- Maybe typeDecl+transformTypeDecl (ClassTypeDecl (ClassDecl mods iden tparams mt refts (ClassBody dcls))) +  = ClassTypeDecl (ClassDecl mods iden tparams mt refts (ClassBody $ transformDecl<$>dcls))+----------------    +transformDecl :: Decl -> Decl    +transformDecl (MemberDecl md) = MemberDecl $ transformMemberDecl md +----------------+transformInterfaceBody :: InterfaceBody -> ClassBody+transformInterfaceBody (InterfaceBody mds) = ClassBody $ (\md->MemberDecl (transformMemberDecl md))<$>mds+-------------+transformMemberDecl :: MemberDecl -> MemberDecl +transformMemberDecl f@(FieldDecl fmods [typeQQ|actor|] vdecs) = f+transformMemberDecl (FieldDecl fmods ft vdecs) = (FieldDecl fmods ft (transformVarDecls vdecs))+transformMemberDecl m@(MethodDecl mmods mtparams mmaybet mident mformparams mexceptionspecs mb) +  | Typemethod `elem` mmods  = m+  | otherwise  = MethodDecl mmods mtparams mmaybet mident mformparams mexceptionspecs (transformMethodBody mb)+transformMemberDecl (ConstructorDecl cmods ctparams cident cformparams cexceptionspecs cb) +  = ConstructorDecl cmods ctparams cident cformparams cexceptionspecs (transformConstructorBody cb)+transformMemberDecl x = x+-- I assumed the LockDecl and PolicyDecl should not be touch +-- Also I didnt write code for inner classes/interfaces +------+transformVarDecls :: [VarDecl] -> [VarDecl]+transformVarDecls vds = [ VarDecl varDeclId Nothing | (VarDecl varDeclId _) <- vds]+-------+transformMethodBody :: MethodBody -> MethodBody+transformMethodBody = const $MethodBody  Nothing -- [methodBodyQQ|{}|] +-- maybe we have to add nothing instead of "just emptyMethodBody" +-------+transformConstructorBody ::  ConstructorBody -> ConstructorBody+transformConstructorBody (ConstructorBody explConstrInvm bs) = ConstructorBody  Nothing [] -- second argument nothing ?++++