diff options
| author | Simon Peyton Jones <simonpj@microsoft.com> | 2011-05-06 15:35:07 +0100 |
|---|---|---|
| committer | Simon Peyton Jones <simonpj@microsoft.com> | 2011-05-06 15:35:07 +0100 |
| commit | 668ac8061c35fd5b72816fd3c4dd4881c46db737 (patch) | |
| tree | ef59a3863b756af80ffa88b4e9a96d9148c5ae70 | |
| parent | abfa45f26f9a5d2bc67b18b7820e0b4039f12ad3 (diff) | |
| download | haskell-668ac8061c35fd5b72816fd3c4dd4881c46db737.tar.gz | |
Missing coercion case in byte code generation
| -rw-r--r-- | compiler/ghci/ByteCodeGen.lhs | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/compiler/ghci/ByteCodeGen.lhs b/compiler/ghci/ByteCodeGen.lhs index b1d4bd7656..c07073aee6 100644 --- a/compiler/ghci/ByteCodeGen.lhs +++ b/compiler/ghci/ByteCodeGen.lhs @@ -1198,6 +1198,9 @@ pushAtom d p e | Just e' <- bcView e = pushAtom d p e' +pushAtom _ _ (AnnCoercion {}) -- Coercions are zero-width things, + = return (nilOL, 0) -- treated just like a variable VoidArg + pushAtom d p (AnnVar v) | idCgRep v == VoidArg = return (nilOL, 0) @@ -1271,9 +1274,6 @@ pushAtom _ _ (AnnLit lit) -- Get the addr on the stack, untaggedly return (unitOL (PUSH_UBX (Right addr) 1), 1) -pushAtom d p (AnnCast e _) - = pushAtom d p (snd e) - pushAtom _ _ expr = pprPanic "ByteCodeGen.pushAtom" (pprCoreExpr (deAnnotate (undefined, expr))) @@ -1464,6 +1464,7 @@ bcView _ = Nothing isVoidArgAtom :: AnnExpr' Var ann -> Bool isVoidArgAtom e | Just e' <- bcView e = isVoidArgAtom e' isVoidArgAtom (AnnVar v) = typePrimRep (idType v) == VoidRep +isVoidArgAtom (AnnCoercion {}) = True isVoidArgAtom _ = False atomPrimRep :: AnnExpr' Id ann -> PrimRep |
