Commit 644c1be9 authored by simonpj's avatar simonpj
Browse files

[project @ 2001-03-23 10:46:27 by simonpj]

-----------------------------------
	Correct size calculations for INLINE notes
	-----------------------------------

Amazingly, CoreUnfold.size_up wasn't treating an InlineMe note
as small.  (InlineMe was only dealt with at top level.)  As
the comment now says:

 	-- This can be important.  If you have an instance decl like this:
 	-- 	instance Foo a => Foo [a] where
 	--	   {-# INLINE op1, op2 #-}
 	--	   op1 = ...
 	--	   op2 = ...
 	-- then we'll get a dfun which is a pair of two INLINE lambdas

This fixes a problem Manuel encountered.
parent 86d20be7
......@@ -188,7 +188,15 @@ sizeExpr bOMB_OUT_SIZE top_args expr
size_up (Type t) = sizeZero -- Types cost nothing
size_up (Var v) = sizeOne
size_up (Note _ body) = size_up body -- Notes cost nothing
size_up (Note InlineMe body) = sizeOne -- Inline notes make it look very small
-- This can be important. If you have an instance decl like this:
-- instance Foo a => Foo [a] where
-- {-# INLINE op1, op2 #-}
-- op1 = ...
-- op2 = ...
-- then we'll get a dfun which is a pair of two INLINE lambdas
size_up (Note _ body) = size_up body -- Other notes cost nothing
size_up (App fun (Type t)) = size_up fun
size_up (App fun arg) = size_up_app fun [arg]
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment