on master help sign in
parse and constrain boilerplated done; todo parse source and get shader type
commit62585b77cc5bc9dc7ba1a3a3bb7a06eda02b3e8d authorJohn P Mayer Jr <john.p.mayer.jr@gmail.com> dateThu 28 Nov 2013, 15:23 (13 years ago) parentf53384a
6 files changed+32−2
compiler/Parse/Expression.hs+7−1 compiler/Parse/Helpers.hs+12−1 compiler/SourceSyntax/Expression.hs+1 compiler/Transform/Canonicalize.hs+4 compiler/Transform/SortDefinitions.hs+4 compiler/Type/Constrain/Expression.hs+4
compiler/Parse/Expression.hs+7−1
@@ -46,7 +46,7 @@ negative = do
4646-------- Complex Terms --------
4747
4848listTerm :: IParser (Expr t v)
49−listTerm = markdown' <|> braces (try range <|> ExplicitList <$> commaSep expr)
49+listTerm = markdown' <|> glShader' <|> braces (try range <|> ExplicitList <$> commaSep expr)
5050 where
5151 range = do
5252 lo <- expr
@@ -59,6 +59,12 @@ listTerm = markdown' <|> braces (try range <|> ExplicitList <$> commaSep expr)
5959 (rawText, exprs) <- markdown (interpolation uid)
6060 return (Markdown uid (filter (/='\r') rawText) exprs)
6161
62+ glShader' = do
63+ pos <- getPosition
64+ let uid = show (sourceLine pos) ++ ":" ++ show (sourceColumn pos)
65+ rawSrc <- glShader
66+ return $ GLShader uid (filter (/='\r') rawSrc)
67+
6268 span uid index =
6369 "<span id=\"md-" ++ uid ++ "-" ++ show index ++ "\"></span>"
6470
compiler/Parse/Helpers.hs+12−1
@@ -312,4 +312,15 @@ markdown interpolation = try (string "[markdown|") >> closeMarkdown "" []
312312 , uncurry closeMarkdown =<< interpolation md stuff
313313 , do c <- anyChar
314314 closeMarkdown (md ++ [c]) stuff
315− ]
315+ ]
316+
317+glShader :: IParser String
318+glShader = try (string "[glShader|") >> closeShader "" where
319+ closeShader src = choice
320+ [ do
321+ try (string "|]")
322+ return src
323+ , do
324+ c <- anyChar
325+ closeShader (src ++ [c])
326+ ]
compiler/SourceSyntax/Expression.hs+1
@@ -30,6 +30,7 @@ data Expr t v
3030 | Modify (LExpr t v) [(String, LExpr t v)]
3131 | Record [(String, LExpr t v)]
3232 | Markdown String String [LExpr t v]
33+ | GLShader String String
3334 deriving (Eq, Show, Data, Typeable)
3435
3536data Def tipe var
compiler/Transform/Canonicalize.hs+4
@@ -1,3 +1,6 @@
1+
2+{-# OPTIONS -Wall #-}
3+
14module Transform.Canonicalize (interface, metadataModule) where
25
36import Control.Arrow ((***))
@@ -175,6 +178,7 @@ rename env lexpr@(L s expr) =
175178
176179 Markdown uid md es -> Markdown uid md `liftM` mapM rnm es
177180
181+ GLShader _ _ -> return expr
178182
179183renamePattern :: Env -> Pattern -> Either String Pattern
180184renamePattern env pattern =
compiler/Transform/SortDefinitions.hs+4
@@ -1,4 +1,6 @@
11
2+{-# OPTIONS -Wall #-}
3+
24module Transform.SortDefinitions (sortDefs, boundVars, flattenLets) where
35
46import Control.Monad.State
@@ -99,6 +101,8 @@ reorder lexpr@(L s expr) =
99101
100102 Markdown uid md es -> Markdown uid md <$> mapM reorder es
101103
104+ GLShader _ _ -> return expr
105+
102106 -- Actually do some reordering
103107 Let defs body ->
104108 do body' <- reorder body
compiler/Type/Constrain/Expression.hs+4
@@ -35,6 +35,10 @@ constrain env (L span expr) tipe =
3535 case expr of
3636 Literal lit -> liftIO $ Literal.constrain env span lit tipe
3737
38+ GLShader _ src -> return . L span $ CEqual tipe shaderTipe
39+ where
40+ shaderTipe = error "What's the shader type"
41+
3842 Var name | name == saveEnvName -> return (L span CSaveEnv)
3943 | otherwise -> return (name <? tipe)
4044