@@ -70,9 +70,12 @@ loadModule f
70loadSource :: FilePath -> Idris ()
70loadSource :: FilePath -> Idris ()
71loadSource f = do iLOG ("Reading " ++ f)
71loadSource f = do iLOG ("Reading " ++ f)
72 file <- lift $ readFile f
72 file <- lift $ readFile f
73− (modules, rest, pos) <- parseImports f file
73+ (mname, modules, rest, pos) <- parseImports f file
74 mapM_ loadModule modules
74 mapM_ loadModule modules
75− ds <- parseProg defaultSyntax f rest pos
75+ ds' <- parseProg (defaultSyntax {syn_namespace = mname }) f rest pos
76+ let ds = case mname of
78+ (x:_) -> [PNamespace x ds']
76 logLvl 3 (dumpDecls ds)
79 logLvl 3 (dumpDecls ds)
77 i <- getIState
80 i <- getIState
78 logLvl 10 (show (toAlist (idris_implicits i)))
81 logLvl 10 (show (toAlist (idris_implicits i)))
@@ -87,13 +90,14 @@ parseTac i = runParser (do t <- pTactic defaultSyntax
88 return t) i "(proof)"
91 return t) i "(proof)"
90−parseImports :: FilePath -> String -> Idris ([String], String, SourcePos)
93+parseImports :: FilePath -> String -> Idris ([String], [String], String, SourcePos)
91parseImports fname input
94parseImports fname input
92 = do i <- get
95 = do i <- get
96+ case (runParser (do mname <- pHeader
93− case (runParser (do ps <- many pImport
97+ ps <- many pImport
94 rest <- getInput
98 rest <- getInput
95 pos <- getPosition
99 pos <- getPosition
96− return ((ps, rest, pos), i)) i fname input) of
100+ return ((mname, ps, rest, pos), i)) i fname input) of
97 Left err -> fail (ishow err)
101 Left err -> fail (ishow err)
98 Right (x, i) -> do put i
102 Right (x, i) -> do put i
@@ -101,6 +105,11 @@ parseImports fname input
101 fname ++ ":" ++ show ln ++ ":parse error"
105 fname ++ ":" ++ show ln ++ ":parse error"
102-- show (map messageString (errorMessages err))
106-- show (map messageString (errorMessages err))
108+pHeader :: IParser [String]
109+pHeader = try (do reserved "module"; i <- identifier; lchar ';'
105pfc :: IParser FC
114pfc :: IParser FC
106pfc = do s <- getPosition
115pfc = do s <- getPosition