[project @ 2003-01-24 14:04:40 by simonmar]
authorsimonmar <unknown>
Fri, 24 Jan 2003 14:04:41 +0000 (14:04 +0000)
committersimonmar <unknown>
Fri, 24 Jan 2003 14:04:41 +0000 (14:04 +0000)
commitb429adbb230a10427a833073f6e7502b6e5da7fd
tree0cf7abd6e32ebe52942c4c7182987ccfd4a92944
parent519c3db41ba9017ab2e124b4575ae12667b53881
[project @ 2003-01-24 14:04:40 by simonmar]
- Generalise seq to allow an unlifted type in its second argument.  This
  works because seq is *always* inlined and replaced by a case.

- Remove getTag, a wired-in Id with an unfolding, with a definition
  in GHC.Base:

getTag x = x `seq` dataToTag# x

  this is why we required the above generalisation to seq (dataToTag#
  returns an Int#).  See the comments in GHC.Base for more details.

- As a side-effect, this fixes a bug in the interpreter, where the
  compiler optimised away the evaluation of the argument to dataToTag#,
  but the interpreter ended up passing it an unevaluated thunk (nullary
  constructors aren't always evaluated in GHCi, but the simplifier
  assumes they are).  Now, in the interpreter, getTag won't be inlined
  so the compiler can't optimise away the evaluation, and we're saved.

  The real bug here is either (a) dataToTag# requires an evaluated
  argument or (b) the interpreter doesn't supply it with one, take your
  pick.
ghc/compiler/basicTypes/MkId.lhs
ghc/compiler/prelude/PrelNames.lhs