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
|