Commit 81e51a26 authored by chevalier@alum.wellesley.edu's avatar chevalier@alum.wellesley.edu
Browse files

Change syntax for qualified names in External Core

Two changes that make the ext-core code uglier but the parser easier:

- Prefix qualified names with "^" so that we can more easily
distinguish a qualified name:
   ^a:Foo.Bar.quux 
from an unqualified name:
   a

- z-encode package names ("ghc-prim" was the culprit.)
parent d74b100e
......@@ -25,6 +25,7 @@ import Name
import NameSet
import UniqSet
import Outputable
import Encoding
import ForeignCall
import DynFlags
import StaticFlags
......@@ -219,13 +220,16 @@ make_var_id = make_id True
-- *do* want to keep the package name (we don't want baseZCGHCziBase,
-- because that would just be ugly.)
-- SIGH.
-- We encode the package name as well.
make_mid :: Module -> C.Id
-- Super ugly code, but I can't find anything else that does quite what I
-- want (encodes the hierarchical module name without encoding the colon
-- that separates the package name from it.)
make_mid m = (packageIdString (modulePackageId m)) ++
":" ++
showSDoc (pprCode CStyle (pprModuleName (moduleName m)))
make_mid m = showSDoc $
(text $ zEncodeString $ packageIdString $ modulePackageId m)
<> text ":"
<> (pprEncoded $ pprModuleName $ moduleName m)
where pprEncoded = pprCode CStyle
make_qid :: Bool -> Name -> C.Qual C.Id
make_qid is_var n = (mname,make_id is_var n)
......
......@@ -80,7 +80,10 @@ pname id = text (zEncodeString id)
pqname :: Qual Id -> Doc
pqname ("",id) = pname id
pqname (m,id) = text m <> char '.' <> pname id
-- We print out a special character before a qualified name so as to
-- disambiguate unqualified names like "m" from qualified names like
-- "m:Foo.Bar.y". This makes the ext-core parser easier.
pqname (m,id) = char '^' <> text m <> char '.' <> pname id
ptbind, pattbind :: Tbind -> Doc
ptbind (t,Klifted) = pname t
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment