From: Wolfgang T. <wth...@us...> - 2005-07-23 06:10:09
|
Update of /cvsroot/hoc/hoc/HOC/HOC In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18966 Modified Files: DeclareSelector.hs Log Message: Reduce code size by about... *drum roll* ... 20%. The trick: common up duplicate uses of selector names using "let" in generated code. The strings take up way too much space because the unpackCString# optimisation in GHC doesn't work after the strings were passed through template Haskell, so duplicating them hurts. Index: DeclareSelector.hs =================================================================== RCS file: /cvsroot/hoc/hoc/HOC/HOC/DeclareSelector.hs,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- DeclareSelector.hs 6 Dec 2004 03:46:51 -0000 1.5 +++ DeclareSelector.hs 23 Jul 2005 06:09:26 -0000 1.6 @@ -139,12 +139,14 @@ let e = [| undefined |] `sigE` (return $ simplifyType doctoredTypeSig) in valD (varP $ mkName $ infoName) (normalB [| - SelectorInfo name - haskellName - (getCifForSelector $(e)) - (getSelectorForName name) - nArgs - isUnit + let n = name + hn = $(if haskellName == name then [|n|] else [|haskellName|]) + in SelectorInfo n + hn + (getCifForSelector $(e)) + (getSelectorForName n) + nArgs + isUnit |]) [], -- type $(imptypeName) target inst = arg1 -> arg2 -> target -> IO result |