@@ -15,6 +15,7 @@ structure State where
1515 error? : Option String := none
1616 isModule : Bool := false
1717 -- per-import fields to be consumed by `moduleIdent`
18+ isMeta : Bool := false
1819 isExported : Bool := false
1920 importAll : Bool := false
2021 deriving Inhabited
@@ -147,7 +148,7 @@ def State.pushImport (i : Import) (s : State) : State :=
147148
148149partial def moduleIdent : Parser := fun input s =>
149150 let finalize (module : Name) : Parser := fun input s =>
150- whitespace input (s.pushImport { module, importAll := s.importAll, isExported := s.isExported })
151+ whitespace input (s.pushImport { module, isMeta := s.isMeta, importAll := s.importAll, isExported := s.isExported })
151152 let rec parse (module : Name) (s : State) :=
152153 let i := s.pos
153154 if h : input.atEnd i then
@@ -190,8 +191,11 @@ partial def moduleIdent : Parser := fun input s =>
190191 | none => many p input s
191192 | some _ => { pos, error? := none, imports := s.imports.shrink size }
192193
194+ def setIsMeta (isMeta : Bool) : Parser := fun _ s =>
195+ { s with isMeta }
196+
193197def setIsExported (isExported : Bool) : Parser := fun _ s =>
194- { s with isExported := isExported }
198+ { s with isExported }
195199
196200def setImportAll (importAll : Bool) : Parser := fun _ s =>
197201 { s with importAll }
@@ -200,6 +204,7 @@ def main : Parser :=
200204 keywordCore "module" (fun _ s => { s with isModule := true }) (fun _ s => s) >>
201205 keywordCore "prelude" (fun _ s => s.pushImport `Init) (fun _ s => s) >>
202206 many (keywordCore "private" (setIsExported true ) (setIsExported false ) >>
207+ keywordCore "meta" (setIsMeta true ) (setIsMeta false ) >>
203208 keyword "import" >>
204209 keywordCore "all" (setImportAll false ) (setImportAll true ) >>
205210 moduleIdent)
0 commit comments