From: adam Date: Sun, 27 May 2007 21:02:19 +0000 (-0700) Subject: checkpoint X-Git-Url: http://git.megacz.com/?p=wix.git;a=commitdiff_plain;h=0c91eca8f33ec53c701be60ba6d11461153466a8;hp=3c96b1336f651fa3689e975f4793b55c43591d21 checkpoint darcs-hash:20070527210219-5007d-6cdddd978d6022300e871409d9431baba1153988.gz --- diff --git a/Makefile b/Makefile index 007ac4b..9966c34 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,9 @@ +sbp = $(shell pwd)/sbp/ + +lambdavm_jars = $(ghcroot)/rts/HSrts.jar +lambdavm_jars += $(ghcroot)/libraries/base/HSbase.jar +lambdavm_jars += $(ghcroot)/libraries/stm/HSstm.jar + ghcroot = /usr/local/brian/ghc pwd = $(shell pwd) ghc = $(ghcroot)/compiler/ghc-inplace -fallow-undecidable-instances -fallow-overlapping-instances @@ -5,7 +11,13 @@ ghc += -fglasgow-exts -cpp -hidir $(pwd)/build/hi -i$(pwd)/build/hi -odir $(p ghclibs = $(ghcroot)/rts/HSrts.jar:$(ghcroot)/libraries/base/HSbase.jar:$(ghcroot)/libraries/stm/HSstm.jar java = java -Xmx800m -java += $(profile) -cp $(ghclibs):lib/edu.berkeley.sbp.jar:build/class +java += $(profile) -cp $(ghclibs):$(sbp)/edu.berkeley.sbp.jar:build/class + +$(sbp): + darcs get --repo-name=$@ http://research.cs.berkeley.edu/project/sbp/edu.berkeley.sbp + +$(sbp)/edu.berkeley.sbp.jar: $(sbp) + cd $(sbp); make edu.berkeley.sbp.jar run: build/class/Main.class build/class/Tib.class $(java) HaskellHelper xt html @@ -30,23 +42,24 @@ docs: debug: build/class/Main.class build/class/Tib.class $(java) -Dsbp.verbose=true HaskellHelper xt html -wix.jar: build/class/Main.class build/class/Tib.class +wix.jar: build/class/Main.class build/class/Tib.class $(sbp)/edu.berkeley.sbp.jar rm -rf tmp mkdir tmp - cd build/class; for A in $(ghcroot)/rts/HSrts.jar $(ghcroot)/libraries/base/HSbase.jar $(ghcroot)/libraries/stm/HSstm.jar ../../lib/edu.berkeley.sbp.jar; \ + cd build/class; for A in $(lambdavm_jars) ../../$(sbp)/edu.berkeley.sbp.jar; \ do jar xvf $$A; done echo 'Main-Class: HaskellHelper' > build/manifest cd build/class; jar cvmf ../manifest ../../wix.jar . -build/class/Tib.class: $(shell find src -name \*.java) - javac -d build/class -cp lib/edu.berkeley.sbp.jar $(shell find src -name \*.java) +build/class/Tib.class: $(shell find src -name \*.java) $(sbp)/edu.berkeley.sbp.jar + javac -d build/class -cp $(sbp)/edu.berkeley.sbp.jar $(shell find src -name \*.java) -build/class/Main.class: $(shell find src -name \*.lhs) +build/class/Main.class: $(shell find src -name \*.lhs) $(sbp)/edu.berkeley.sbp.jar mkdir -p build/class/Text/PrettyPrint + mkdir -p build/class/Edu/Berkeley/SBP/Haskell/ mkdir -p build/hi cd src; $(ghc) -c -java Util.lhs cd src; $(ghc) -c -java Text/PrettyPrint/Leijen.hs - cd src; $(ghc) -c -java SBP.lhs + cd src; $(ghc) -c -java $(sbp)/src/edu/berkeley/sbp/haskell/SBP.lhs cd src; $(ghc) -c -java FromTree.lhs cd src; $(ghc) -c -java Doc.lhs cd src; $(ghc) -c -java Html.lhs diff --git a/src/Doc.lhs b/src/Doc.lhs index a36d367..5890439 100644 --- a/src/Doc.lhs +++ b/src/Doc.lhs @@ -4,7 +4,7 @@ where import Numeric import Data.Bits import Data.Char -import SBP +import Edu.Berkeley.Sbp.Haskell.SBP import Util import FromTree import qualified Text.PrettyPrint.Leijen as PP diff --git a/src/FromTree.lhs b/src/FromTree.lhs index aca7ef6..9b7066e 100644 --- a/src/FromTree.lhs +++ b/src/FromTree.lhs @@ -1,7 +1,7 @@ \begin{code} module FromTree where -import SBP +import Edu.Berkeley.Sbp.Haskell.SBP class FromTree a where fromTree :: Tree -> a diff --git a/src/Html.lhs b/src/Html.lhs index e244bca..5d7a8c6 100644 --- a/src/Html.lhs +++ b/src/Html.lhs @@ -1,7 +1,7 @@ \begin{code} module Html where -import SBP +import Edu.Berkeley.Sbp.Haskell.SBP import FromTree import Doc import List(isSuffixOf,isPrefixOf) diff --git a/src/SBP.lhs b/src/SBP.lhs deleted file mode 100644 index de32f62..0000000 --- a/src/SBP.lhs +++ /dev/null @@ -1,159 +0,0 @@ -\begin{code} --- --- These bindings are highly experimental and subject to change --- without notice. You've been warned. --- -module SBP(Tree(Tree),Location(Location),Region(Region),parseFile,prettyPrintTree,coalesceFlatHeadlessNodes) -where - -#if defined(java_HOST_OS) -import Foreign -import Foreign.Java -#define CONCAT(x,y) x/**/y -#define DEFINE_OBJECT(s,name) \ -data CONCAT(name,_); \ -type name = JObject CONCAT(name,_); \ -foreign import jvm s CONCAT(_,name) :: JClass; \ -instance JType_ CONCAT(name,_) where jClass_ _ = CONCAT(_,name); -#else -import Header_Java; -import Class_HaskellHelper; -import Class_java_lang_Object; -import Class_java_lang_Class; -import Class_java_lang_String; -import Class_edu_berkeley_sbp_Tree; -import Header_edu_berkeley_sbp_Tree; -import JVM_HaskellHelper; -import Header_HaskellHelper; -import TypedString; -import JVMBridge; -import JavaText; -import JavaTypes; -import Data.Int; -import Invocation; -#endif ---import Text.PrettyPrint.HughesPJ -import Text.PrettyPrint.Leijen - -data Location = Location Int Int -data Region = Region Location Location - -data Tree = Tree String [Tree] Region -instance Show Tree - where - show t@(Tree _ _ _) = show $ prettyPrintTree $ t - -coalesceFlatHeadlessNodes t@(Tree s children r) - | s==[], flat t = Tree (concat $ map (\(Tree s _ _) -> s) children) [] r - | otherwise = Tree s (map coalesceFlatHeadlessNodes children) r - where - flat (Tree _ children _) = not (any id $ map notFlatComponent children) - notFlatComponent (Tree _ [] _) = False - notFlatComponent (Tree _ _ _) = True - -fsep = fillSep -prettyPrintTree (Tree "" [] _) = empty -prettyPrintTree (Tree s [] _) = text s -prettyPrintTree (Tree [] children _) = prettyPrintTreeList children -prettyPrintTree (Tree s children _) = (text (s++":")) <$$> (prettyPrintTreeList children) -prettyPrintTreeList [] = text "{}" -prettyPrintTreeList children - | allsingles children = text $ "\"" ++ (concatMap (\(Tree s _ _) -> s) children) ++ "\"" - | otherwise = hang 2 $ - (text "{") - <+> - (group - ((fsep $ map (group . prettyPrintTree) children) - <+> - (text "}"))) -allsingles = all (\(Tree s c _) -> (length s)==1 && (length c)==0) - -nullRegion = (Region (Location 0 0) (Location 0 0)) - - - ------------------------------------------------------------------------------- -#if defined(java_HOST_OS) -foreign import jvm type "edu.berkeley.sbp.Tree" JTree# -data JTree = JTree JTree# -foreign import jvm type "java.lang.Object" Object# -data Object = Object Object# -foreign import jvm safe "edu.berkeley.sbp.misc.RegressionTests.main" regressionTests :: IO () -foreign import jvm safe "HaskellHelper.help" haskellHelper :: JString -> IO JTree -foreign import jvm safe "HaskellHelper.isNull" isNull :: Object -> IO Bool -foreign import jvm safe "getHead" getHead :: JTree -> IO Object -foreign import jvm safe "child" getChild :: JTree -> Int32 -> IO JTree -foreign import jvm safe "size" size :: JTree -> IO Int32 -foreign import jvm safe "toString" jtoString :: Object -> IO JString - -toString o = do isn <- isNull o - if isn then return "" - else do str <- jtoString o - return (unpackJString str) - - -haskify :: JTree -> IO Tree -haskify t = - do head <- getHead t - str <- toString head - numChildren <- size t - children <- if numChildren == 0 - then do return [] - else do children <- mapM (\i -> getChild t i) - $ take (fromIntegral numChildren) - $ iterate (+1) 0 - h <- mapM haskify children - return h - return $ Tree str children nullRegion - -parseFile :: - String -> -- file to be parsed - IO Tree - -parseFile f = do f' <- packJString f - tree <- haskellHelper f' - x <- haskify tree - return x - ------------------------------------------------------------------------------- -#else - -- Why do I need this? - instance SubJavaClassMarker - Header_edu_berkeley_sbp_Tree.Class_Jedu_berkeley_sbp_Tree - Header_HaskellHelper.Class_Jedu_berkeley_sbp_Tree - - parseFile :: - [String] -> -- class path - String -> -- grammar *.g file - String -> -- file to be parsed - IO Tree - - parseFile classPath grammarFile inputFile = - runJVM classPath - ((do class_JHaskellHelper - s1 <- new_JString_ArrayJchar $ toJavaString grammarFile - s2 <- new_JString_ArrayJchar $ toJavaString inputFile - tree <- main_JHaskellHelper_JString_JString (s1, s2) - t <- haskifyTree tree - return t - ) :: JVM Tree) - - haskifyTree t = - ((do class_JHaskellHelper - class_JTree - head <- getHead_JTree t () - isNull <- getIsNothing head - str <- if isNull then (return "") else (toString_JObject ((castTLRef head) :: Jjava_lang_Object) () >>= getStringUTF >>= \x -> return (showUTF8 x)) - numChildren <- size_JTree t() - children <- if numChildren == 0 - then do return [] - else do children <- mapM (\i -> child_JTree_Jint t ((fromIntegral i)::Int32)) - $ take (fromIntegral numChildren) - $ iterate (+1) 0 - h <- mapM (\c -> haskifyTree (castTLRef c)) children - return h - return $ Tree str children nullRegion - ) :: JVM Tree) - -#endif -\end{code} diff --git a/src/Wix.lhs b/src/Wix.lhs index e969aab..f71a715 100644 --- a/src/Wix.lhs +++ b/src/Wix.lhs @@ -1,7 +1,7 @@ \begin{code} module Wix(main') where -import SBP +import Edu.Berkeley.Sbp.Haskell.SBP import FromTree import Doc import Html