summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
Diffstat (limited to 'compiler')
-rw-r--r--compiler/main/Constants.hs3
-rw-r--r--compiler/prelude/PrelNames.hs3
-rw-r--r--compiler/prelude/TysWiredIn.hs7
3 files changed, 10 insertions, 3 deletions
diff --git a/compiler/main/Constants.hs b/compiler/main/Constants.hs
index 3dafbac996..e734f1d425 100644
--- a/compiler/main/Constants.hs
+++ b/compiler/main/Constants.hs
@@ -17,6 +17,9 @@ mAX_TUPLE_SIZE :: Int
mAX_TUPLE_SIZE = 62 -- Should really match the number
-- of decls in Data.Tuple
+sMALL_TUPLE_SIZE :: Int
+sMALL_TUPLE_SIZE = 15 -- XXX Document these properly
+
mAX_CTUPLE_SIZE :: Int -- Constraint tuples
mAX_CTUPLE_SIZE = 62 -- Should match the number of decls in GHC.Classes
diff --git a/compiler/prelude/PrelNames.hs b/compiler/prelude/PrelNames.hs
index 41c9e36304..ee1fe3c99b 100644
--- a/compiler/prelude/PrelNames.hs
+++ b/compiler/prelude/PrelNames.hs
@@ -440,7 +440,7 @@ pRELUDE = mkBaseModule_ pRELUDE_NAME
gHC_PRIM, gHC_TYPES, gHC_GENERICS, gHC_MAGIC,
gHC_CLASSES, gHC_BASE, gHC_ENUM, gHC_GHCI, gHC_CSTRING,
gHC_SHOW, gHC_READ, gHC_NUM, gHC_INTEGER_TYPE, gHC_LIST,
- gHC_TUPLE, dATA_TUPLE, dATA_EITHER, dATA_STRING,
+ gHC_TUPLE, gHC_LARGETUPLE, dATA_TUPLE, dATA_EITHER, dATA_STRING,
dATA_FOLDABLE, dATA_TRAVERSABLE, dATA_MONOID, dATA_SEMIGROUP,
gHC_CONC, gHC_IO, gHC_IO_Exception,
gHC_ST, gHC_ARR, gHC_STABLE, gHC_PTR, gHC_ERR, gHC_REAL,
@@ -466,6 +466,7 @@ gHC_NUM = mkBaseModule (fsLit "GHC.Num")
gHC_INTEGER_TYPE= mkIntegerModule (fsLit "GHC.Integer.Type")
gHC_LIST = mkBaseModule (fsLit "GHC.List")
gHC_TUPLE = mkPrimModule (fsLit "GHC.Tuple")
+gHC_LARGETUPLE = mkBaseModule (fsLit "GHC.LargeTuple")
dATA_TUPLE = mkBaseModule (fsLit "Data.Tuple")
dATA_EITHER = mkBaseModule (fsLit "Data.Either")
dATA_STRING = mkBaseModule (fsLit "Data.String")
diff --git a/compiler/prelude/TysWiredIn.hs b/compiler/prelude/TysWiredIn.hs
index 1aea16aabc..f3338740ac 100644
--- a/compiler/prelude/TysWiredIn.hs
+++ b/compiler/prelude/TysWiredIn.hs
@@ -137,7 +137,8 @@ import {-# SOURCE #-} KnownUniques
-- others:
import CoAxiom
import Id
-import Constants ( mAX_TUPLE_SIZE, mAX_CTUPLE_SIZE, mAX_SUM_SIZE )
+import Constants ( mAX_TUPLE_SIZE, sMALL_TUPLE_SIZE,
+ mAX_CTUPLE_SIZE, mAX_SUM_SIZE )
import Module ( Module )
import Type
import DataCon
@@ -830,7 +831,9 @@ mk_tuple Boxed arity = (tycon, tuple_con)
tuple_con = pcDataCon dc_name dc_tvs dc_arg_tys tycon
boxity = Boxed
- modu = gHC_TUPLE
+ modu
+ | arity <= sMALL_TUPLE_SIZE = gHC_TUPLE
+ | otherwise = gHC_LARGETUPLE
tc_name = mkWiredInName modu (mkTupleOcc tcName boxity arity) tc_uniq
(ATyCon tycon) BuiltInSyntax
dc_name = mkWiredInName modu (mkTupleOcc dataName boxity arity) dc_uniq