on master help sign in
Turn O(n^2) parsing of shaders into O(n)

fixes the list concatenation gotcha

commit861a91d4b6d46f845778436d3234ba23c13b54d0 authorEvan Czaplicki <info@elm-lang.org> dateMon 31 Mar 2014, 22:41 (13 years ago) parentbe3daf7
1 file changed+12−14
compiler/Parse/Helpers.hs+12−14
compiler/Parse/Helpers.hs+12−14
@@ -322,20 +322,18 @@ markdown interpolation = try (string "[markdown|") >> closeMarkdown (++ "") []
322322 ]
323323
324324glShader :: IParser (String, Literal.GLShaderTipe)
325−glShader = do
326− do
327− rawSrc <- try (string "[glShader|") >> closeShader ""
328− case glSource rawSrc of
329− Left err -> parserFail . show $ err
330− Right tipe -> return (rawSrc, tipe)
331− where
332− closeShader src = choice
333− [ do
334− try (string "|]")
335− return src
336− , do
337− c <- anyChar
338− closeShader (src ++ [c])
325+glShader =
326+ do try (string "[glShader|")
327+ rawSrc <- closeShader id
328+ case glSource rawSrc of
329+ Left err -> parserFail . show $ err
330+ Right tipe -> return (rawSrc, tipe)
331+ where
332+ closeShader builder = choice
333+ [ do try (string "|]")
334+ return (builder "")
335+ , do c <- anyChar
336+ closeShader (builder . (c:))
339337 ]
340338
341339glSource :: String -> Either ParseError Literal.GLShaderTipe