module Parser.SourceFile (
parseInternalSource,
parsePublicSource,
parseTestSource,
) where
import Base.CompilerError
import Parser.Common
import Parser.DefinedCategory ()
import Parser.IntegrationTest ()
import Parser.Pragma
import Parser.TextParser
import Parser.TypeCategory ()
import Types.DefinedCategory
import Types.IntegrationTest
import Types.Pragma
import Types.TypeCategory
parseInternalSource :: ErrorContextM m =>
(FilePath,String) -> m ([Pragma SourceContext],[AnyCategory SourceContext],[DefinedCategory SourceContext])
parseInternalSource :: (FilePath, FilePath)
-> m ([Pragma SourceContext], [AnyCategory SourceContext],
[DefinedCategory SourceContext])
parseInternalSource (FilePath
f,FilePath
s) = TextParser
([Pragma SourceContext], [AnyCategory SourceContext],
[DefinedCategory SourceContext])
-> FilePath
-> FilePath
-> m ([Pragma SourceContext], [AnyCategory SourceContext],
[DefinedCategory SourceContext])
forall (m :: * -> *) a.
ErrorContextM m =>
TextParser a -> FilePath -> FilePath -> m a
runTextParser (ParsecT CompilerMessage FilePath Identity ()
-> ParsecT CompilerMessage FilePath Identity ()
-> TextParser
([Pragma SourceContext], [AnyCategory SourceContext],
[DefinedCategory SourceContext])
-> TextParser
([Pragma SourceContext], [AnyCategory SourceContext],
[DefinedCategory SourceContext])
forall (m :: * -> *) open close a.
Applicative m =>
m open -> m close -> m a -> m a
between ParsecT CompilerMessage FilePath Identity ()
optionalSpace ParsecT CompilerMessage FilePath Identity ()
endOfDoc TextParser
([Pragma SourceContext], [AnyCategory SourceContext],
[DefinedCategory SourceContext])
withPragmas) FilePath
f FilePath
s where
withPragmas :: TextParser
([Pragma SourceContext], [AnyCategory SourceContext],
[DefinedCategory SourceContext])
withPragmas = do
[Pragma SourceContext]
pragmas <- [TextParser (Pragma SourceContext)]
-> TextParser [Pragma SourceContext]
forall a. [TextParser a] -> TextParser [a]
parsePragmas [TextParser (Pragma SourceContext)]
internalSourcePragmas
ParsecT CompilerMessage FilePath Identity ()
optionalSpace
([AnyCategory SourceContext]
cs,[DefinedCategory SourceContext]
ds) <- TextParser (AnyCategory SourceContext)
-> TextParser (DefinedCategory SourceContext)
-> TextParser
([AnyCategory SourceContext], [DefinedCategory SourceContext])
forall a b. TextParser a -> TextParser b -> TextParser ([a], [b])
parseAny2 TextParser (AnyCategory SourceContext)
forall a. ParseFromSource a => TextParser a
sourceParser TextParser (DefinedCategory SourceContext)
forall a. ParseFromSource a => TextParser a
sourceParser
([Pragma SourceContext], [AnyCategory SourceContext],
[DefinedCategory SourceContext])
-> TextParser
([Pragma SourceContext], [AnyCategory SourceContext],
[DefinedCategory SourceContext])
forall (m :: * -> *) a. Monad m => a -> m a
return ([Pragma SourceContext]
pragmas,[AnyCategory SourceContext]
cs,[DefinedCategory SourceContext]
ds)
parsePublicSource :: ErrorContextM m => (FilePath,String) -> m ([Pragma SourceContext],[AnyCategory SourceContext])
parsePublicSource :: (FilePath, FilePath)
-> m ([Pragma SourceContext], [AnyCategory SourceContext])
parsePublicSource (FilePath
f,FilePath
s) = TextParser ([Pragma SourceContext], [AnyCategory SourceContext])
-> FilePath
-> FilePath
-> m ([Pragma SourceContext], [AnyCategory SourceContext])
forall (m :: * -> *) a.
ErrorContextM m =>
TextParser a -> FilePath -> FilePath -> m a
runTextParser (ParsecT CompilerMessage FilePath Identity ()
-> ParsecT CompilerMessage FilePath Identity ()
-> TextParser ([Pragma SourceContext], [AnyCategory SourceContext])
-> TextParser ([Pragma SourceContext], [AnyCategory SourceContext])
forall (m :: * -> *) open close a.
Applicative m =>
m open -> m close -> m a -> m a
between ParsecT CompilerMessage FilePath Identity ()
optionalSpace ParsecT CompilerMessage FilePath Identity ()
endOfDoc TextParser ([Pragma SourceContext], [AnyCategory SourceContext])
withPragmas) FilePath
f FilePath
s where
withPragmas :: TextParser ([Pragma SourceContext], [AnyCategory SourceContext])
withPragmas = do
[Pragma SourceContext]
pragmas <- [TextParser (Pragma SourceContext)]
-> TextParser [Pragma SourceContext]
forall a. [TextParser a] -> TextParser [a]
parsePragmas [TextParser (Pragma SourceContext)]
publicSourcePragmas
ParsecT CompilerMessage FilePath Identity ()
optionalSpace
[AnyCategory SourceContext]
cs <- TextParser (AnyCategory SourceContext)
-> ParsecT CompilerMessage FilePath Identity ()
-> ParsecT
CompilerMessage FilePath Identity [AnyCategory SourceContext]
forall (m :: * -> *) a sep. MonadPlus m => m a -> m sep -> m [a]
sepBy TextParser (AnyCategory SourceContext)
forall a. ParseFromSource a => TextParser a
sourceParser ParsecT CompilerMessage FilePath Identity ()
optionalSpace
([Pragma SourceContext], [AnyCategory SourceContext])
-> TextParser ([Pragma SourceContext], [AnyCategory SourceContext])
forall (m :: * -> *) a. Monad m => a -> m a
return ([Pragma SourceContext]
pragmas,[AnyCategory SourceContext]
cs)
parseTestSource :: ErrorContextM m => (FilePath,String) -> m ([Pragma SourceContext],[IntegrationTest SourceContext])
parseTestSource :: (FilePath, FilePath)
-> m ([Pragma SourceContext], [IntegrationTest SourceContext])
parseTestSource (FilePath
f,FilePath
s) = TextParser
([Pragma SourceContext], [IntegrationTest SourceContext])
-> FilePath
-> FilePath
-> m ([Pragma SourceContext], [IntegrationTest SourceContext])
forall (m :: * -> *) a.
ErrorContextM m =>
TextParser a -> FilePath -> FilePath -> m a
runTextParser (ParsecT CompilerMessage FilePath Identity ()
-> ParsecT CompilerMessage FilePath Identity ()
-> TextParser
([Pragma SourceContext], [IntegrationTest SourceContext])
-> TextParser
([Pragma SourceContext], [IntegrationTest SourceContext])
forall (m :: * -> *) open close a.
Applicative m =>
m open -> m close -> m a -> m a
between ParsecT CompilerMessage FilePath Identity ()
optionalSpace ParsecT CompilerMessage FilePath Identity ()
endOfDoc TextParser
([Pragma SourceContext], [IntegrationTest SourceContext])
withPragmas) FilePath
f FilePath
s where
withPragmas :: TextParser
([Pragma SourceContext], [IntegrationTest SourceContext])
withPragmas = do
[Pragma SourceContext]
pragmas <- [TextParser (Pragma SourceContext)]
-> TextParser [Pragma SourceContext]
forall a. [TextParser a] -> TextParser [a]
parsePragmas [TextParser (Pragma SourceContext)]
testSourcePragmas
ParsecT CompilerMessage FilePath Identity ()
optionalSpace
[IntegrationTest SourceContext]
ts <- ParsecT
CompilerMessage FilePath Identity (IntegrationTest SourceContext)
-> ParsecT CompilerMessage FilePath Identity ()
-> ParsecT
CompilerMessage FilePath Identity [IntegrationTest SourceContext]
forall (m :: * -> *) a sep. MonadPlus m => m a -> m sep -> m [a]
sepBy ParsecT
CompilerMessage FilePath Identity (IntegrationTest SourceContext)
forall a. ParseFromSource a => TextParser a
sourceParser ParsecT CompilerMessage FilePath Identity ()
optionalSpace
([Pragma SourceContext], [IntegrationTest SourceContext])
-> TextParser
([Pragma SourceContext], [IntegrationTest SourceContext])
forall (m :: * -> *) a. Monad m => a -> m a
return ([Pragma SourceContext]
pragmas,[IntegrationTest SourceContext]
ts)
publicSourcePragmas :: [TextParser (Pragma SourceContext)]
publicSourcePragmas :: [TextParser (Pragma SourceContext)]
publicSourcePragmas = [TextParser (Pragma SourceContext)
pragmaModuleOnly,TextParser (Pragma SourceContext)
pragmaTestsOnly]
internalSourcePragmas :: [TextParser (Pragma SourceContext)]
internalSourcePragmas :: [TextParser (Pragma SourceContext)]
internalSourcePragmas = [TextParser (Pragma SourceContext)
pragmaTestsOnly]
testSourcePragmas :: [TextParser (Pragma SourceContext)]
testSourcePragmas :: [TextParser (Pragma SourceContext)]
testSourcePragmas = []