Make dumpIfSet_dyn_or use dumpSDoc
[ghc-hetmet.git] / compiler / coreSyn / ExternalCore.lhs
index fa17734..359419c 100644 (file)
@@ -1,27 +1,27 @@
 %
-% (c) The University of Glasgow 2001
+% (c) The University of Glasgow 2001-2006
 %
 \begin{code}
-
 module ExternalCore where
 
-
 data Module 
  = Module Mname [Tdef] [Vdefg]
 
 data Tdef 
   = Data (Qual Tcon) [Tbind] [Cdef]
-  | Newtype (Qual Tcon) [Tbind] (Maybe Ty)
+  | Newtype (Qual Tcon) (Qual Tcon) [Tbind] Ty
 
 data Cdef 
-  = Constr Dcon [Tbind] [Ty]
-  | GadtConstr Dcon Ty
+  = Constr (Qual Dcon) [Tbind] [Ty]
+  | GadtConstr (Qual Dcon) Ty
 
 data Vdefg 
   = Rec [Vdef]
   | Nonrec Vdef
 
-type Vdef = (Bool,Var,Ty,Exp)  -- Top level bindings are unqualified now
+-- Top-level bindings are qualified, so that the printer doesn't have to pass
+-- around the module name.
+type Vdef = (Bool,Qual Var,Ty,Exp)
 
 data Exp 
   = Var (Qual Var)
@@ -32,9 +32,11 @@ data Exp
   | Lam Bind Exp         
   | Let Vdefg Exp
   | Case Exp Vbind Ty [Alt] {- non-empty list -}
-  | Coerce Ty Exp 
+  | Cast Exp Ty
   | Note String Exp
-  | External String Ty
+  | External String String Ty {- target name, convention, and type -} 
+  | DynExternal String Ty {- convention and type (incl. Addr# of target as first arg) -} 
+  | Label String
 
 data Bind 
   = Vb Vbind
@@ -48,11 +50,21 @@ data Alt
 type Vbind = (Var,Ty)
 type Tbind = (Tvar,Kind)
 
+-- Internally, we represent types and coercions separately; but for
+-- the purposes of external core (at least for now) it's still
+-- convenient to collapse them into a single type.
 data Ty 
   = Tvar Tvar
   | Tcon (Qual Tcon)
   | Tapp Ty Ty
   | Tforall Tbind Ty 
+-- We distinguish primitive coercions because External Core treats
+-- them specially, so we have to print them out with special syntax.
+  | TransCoercion Ty Ty
+  | SymCoercion Ty
+  | UnsafeCoercion Ty Ty
+  | InstCoercion Ty Ty
+  | NthCoercion Int Ty
 
 data Kind 
   = Klifted
@@ -60,6 +72,7 @@ data Kind
   | Kunboxed
   | Kopen
   | Karrow Kind Kind
+  | Keq Ty Ty
 
 data Lit 
   = Lint Integer Ty
@@ -78,10 +91,13 @@ type Qual t = (Mname,t)
 
 type Id = String
 
-primMname = "GHCziPrim"
+primMname :: Mname
+-- For truly horrible reasons, this must be z-encoded.
+-- With any hope, the z-encoding will die soon.
+primMname = "ghczmprim:GHCziPrim"
 
 tcArrow :: Qual Tcon
-tcArrow = (primMname, "ZLzmzgZR")
+tcArrow = (primMname, "(->)")
 
 \end{code}