on master help sign in
Turn O(n^2) parsing of shaders into O(n)
861a91dEvan Czaplicki
compiler/Parse/Helpers.hs+12−14
@@ -322,20 +322,18 @@ markdown interpolation = try (string "[markdown|") >> closeMarkdown (++ "") []
322 ]
322 ]
323
323
324glShader :: IParser (String, Literal.GLShaderTipe)
324glShader :: IParser (String, Literal.GLShaderTipe)
325−glShader = do
325+glShader =
326− do
327− rawSrc <- try (string "[glShader|") >> closeShader ""
326+ do try (string "[glShader|")
327+ rawSrc <- closeShader id
328− case glSource rawSrc of
328+ case glSource rawSrc of
329− Left err -> parserFail . show $ err
329+ Left err -> parserFail . show $ err
330− Right tipe -> return (rawSrc, tipe)
330+ Right tipe -> return (rawSrc, tipe)
331− where
331+ where
332− closeShader src = choice
332+ closeShader builder = choice
333− [ do
334− try (string "|]")
333+ [ do try (string "|]")
335− return src
334+ return (builder "")
336− , do
337− c <- anyChar
335+ , do c <- anyChar
338− closeShader (src ++ [c])
336+ closeShader (builder . (c:))
339 ]
337 ]
340
338
341glSource :: String -> Either ParseError Literal.GLShaderTipe
339glSource :: String -> Either ParseError Literal.GLShaderTipe