summaryrefslogtreecommitdiff
path: root/compiler/ghci/ByteCodeLink.lhs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/ghci/ByteCodeLink.lhs')
-rw-r--r--compiler/ghci/ByteCodeLink.lhs23
1 files changed, 17 insertions, 6 deletions
diff --git a/compiler/ghci/ByteCodeLink.lhs b/compiler/ghci/ByteCodeLink.lhs
index 875f1d6331..d294178e5d 100644
--- a/compiler/ghci/ByteCodeLink.lhs
+++ b/compiler/ghci/ByteCodeLink.lhs
@@ -19,19 +19,21 @@ import ByteCodeItbls ( ItblEnv, ItblPtr )
import ByteCodeAsm ( UnlinkedBCO(..), BCOPtr(..), sizeSS, ssElts )
import ObjLink ( lookupSymbol )
-import Name ( Name, nameModule, nameOccName, isExternalName )
+import Name ( Name, nameModule, nameOccName )
+#ifdef DEBUG
+import Name ( isExternalName )
+#endif
import NameEnv
import OccName ( occNameFS )
import PrimOp ( PrimOp, primOpOcc )
-import Module ( moduleFS )
+import Module
+import PackageConfig ( mainPackageId, packageIdFS )
import FastString ( FastString(..), unpackFS, zEncodeFS )
-import Outputable
import Panic ( GhcException(..) )
-- Standard libraries
import GHC.Word ( Word(..) )
-import Data.Array.IArray ( listArray )
import Data.Array.Base
import GHC.Arr ( STArray(..) )
@@ -256,8 +258,17 @@ linkFail who what
-- HACKS!!! ToDo: cleaner
nameToCLabel :: Name -> String{-suffix-} -> String
nameToCLabel n suffix
- = unpackFS (zEncodeFS (moduleFS (nameModule n)))
- ++ '_': unpackFS (zEncodeFS (occNameFS (nameOccName n))) ++ '_':suffix
+ = if pkgid /= mainPackageId
+ then package_part ++ '_': qual_name
+ else qual_name
+ where
+ pkgid = modulePackageId mod
+ mod = nameModule n
+ package_part = unpackFS (zEncodeFS (packageIdFS (modulePackageId mod)))
+ module_part = unpackFS (zEncodeFS (moduleNameFS (moduleName mod)))
+ occ_part = unpackFS (zEncodeFS (occNameFS (nameOccName n)))
+ qual_name = module_part ++ '_':occ_part ++ '_':suffix
+
primopToCLabel :: PrimOp -> String{-suffix-} -> String
primopToCLabel primop suffix