on master help sign in
parse and constrain boilerplated done; todo parse source and get shader type
62585b7John P Mayer Jr
compiler/Parse/Expression.hs+7−1
@@ -46,7 +46,7 @@ negative = do
46-------- Complex Terms --------
46-------- Complex Terms --------
47
47
48listTerm :: IParser (Expr t v)
48listTerm :: IParser (Expr t v)
49−listTerm = markdown' <|> braces (try range <|> ExplicitList <$> commaSep expr)
49+listTerm = markdown' <|> glShader' <|> braces (try range <|> ExplicitList <$> commaSep expr)
50 where
50 where
51 range = do
51 range = do
52 lo <- expr
52 lo <- expr
@@ -59,6 +59,12 @@ listTerm = markdown' <|> braces (try range <|> ExplicitList <$> commaSep expr)
59 (rawText, exprs) <- markdown (interpolation uid)
59 (rawText, exprs) <- markdown (interpolation uid)
60 return (Markdown uid (filter (/='\r') rawText) exprs)
60 return (Markdown uid (filter (/='\r') rawText) exprs)
61
61
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+
62 span uid index =
68 span uid index =
63 "<span id=\"md-" ++ uid ++ "-" ++ show index ++ "\"></span>"
69 "<span id=\"md-" ++ uid ++ "-" ++ show index ++ "\"></span>"
64
70
compiler/Parse/Helpers.hs+12−1
@@ -312,4 +312,15 @@ markdown interpolation = try (string "[markdown|") >> closeMarkdown "" []
312 , uncurry closeMarkdown =<< interpolation md stuff
312 , uncurry closeMarkdown =<< interpolation md stuff
313 , do c <- anyChar
313 , do c <- anyChar
314 closeMarkdown (md ++ [c]) stuff
314 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
30 | Modify (LExpr t v) [(String, LExpr t v)]
30 | Modify (LExpr t v) [(String, LExpr t v)]
31 | Record [(String, LExpr t v)]
31 | Record [(String, LExpr t v)]
32 | Markdown String String [LExpr t v]
32 | Markdown String String [LExpr t v]
33+ | GLShader String String
33 deriving (Eq, Show, Data, Typeable)
34 deriving (Eq, Show, Data, Typeable)
34
35
35data Def tipe var
36data Def tipe var
compiler/Transform/Canonicalize.hs+4
@@ -1,3 +1,6 @@
1+
2+{-# OPTIONS -Wall #-}
3+
1module Transform.Canonicalize (interface, metadataModule) where
4module Transform.Canonicalize (interface, metadataModule) where
2
5
3import Control.Arrow ((***))
6import Control.Arrow ((***))
@@ -175,6 +178,7 @@ rename env lexpr@(L s expr) =
175
178
176 Markdown uid md es -> Markdown uid md `liftM` mapM rnm es
179 Markdown uid md es -> Markdown uid md `liftM` mapM rnm es
177
180
181+ GLShader _ _ -> return expr
178
182
179renamePattern :: Env -> Pattern -> Either String Pattern
183renamePattern :: Env -> Pattern -> Either String Pattern
180renamePattern env pattern =
184renamePattern env pattern =
compiler/Transform/SortDefinitions.hs+4
@@ -1,4 +1,6 @@
1
1
2+{-# OPTIONS -Wall #-}
3+
2module Transform.SortDefinitions (sortDefs, boundVars, flattenLets) where
4module Transform.SortDefinitions (sortDefs, boundVars, flattenLets) where
3
5
4import Control.Monad.State
6import Control.Monad.State
@@ -99,6 +101,8 @@ reorder lexpr@(L s expr) =
99
101
100 Markdown uid md es -> Markdown uid md <$> mapM reorder es
102 Markdown uid md es -> Markdown uid md <$> mapM reorder es
101
103
104+ GLShader _ _ -> return expr
105+
102 -- Actually do some reordering
106 -- Actually do some reordering
103 Let defs body ->
107 Let defs body ->
104 do body' <- reorder body
108 do body' <- reorder body
compiler/Type/Constrain/Expression.hs+4
@@ -35,6 +35,10 @@ constrain env (L span expr) tipe =
35 case expr of
35 case expr of
36 Literal lit -> liftIO $ Literal.constrain env span lit tipe
36 Literal lit -> liftIO $ Literal.constrain env span lit tipe
37
37
38+ GLShader _ src -> return . L span $ CEqual tipe shaderTipe
39+ where
40+ shaderTipe = error "What's the shader type"
41+
38 Var name | name == saveEnvName -> return (L span CSaveEnv)
42 Var name | name == saveEnvName -> return (L span CSaveEnv)
39 | otherwise -> return (name <? tipe)
43 | otherwise -> return (name <? tipe)
40
44