Revision d8cb8e13

b/htools/Ganeti/THH.hs
131 131
fieldVariable f =
132 132
  case (fieldConstr f) of
133 133
    Just name -> ensureLower name
134
    _ -> fieldName f
134
    _ -> map (\c -> if c == '-' then '_' else c) $ fieldName f
135 135

  
136 136
actualFieldType :: Field -> Q Type
137 137
actualFieldType f | fieldIsContainer f = [t| Container $t |]
......
390 390
-- | Transform an underscore_name into a CamelCase one.
391 391
camelCase :: String -> String
392 392
camelCase = concatMap (ensureUpper . drop 1) .
393
            groupBy (\_ b -> b /= '_') . ('_':)
393
            groupBy (\_ b -> b /= '_' && b /= '-') . ('_':)
394 394

  
395 395
-- | Computes the name of a given constructor.
396 396
constructorName :: Con -> Q Name
......
463 463
                -> Q Clause  -- ^ Resulting clause
464 464
saveConstructor sname fields = do
465 465
  let cname = mkName sname
466
  let fnames = map (mkName . fieldVariable) fields
466
  fnames <- mapM (newName . fieldVariable) fields
467 467
  let pat = conP cname (map varP fnames)
468 468
  let felems = map (uncurry saveObjectField) (zip fnames fields)
469 469
      -- now build the OP_ID serialisation
......
620 620
              -> String -> [Field] -> Q [Dec]
621 621
genSaveObject save_fn sname fields = do
622 622
  let name = mkName sname
623
  let fnames = map (mkName . fieldVariable) fields
623
  fnames <- mapM (newName . fieldVariable) fields
624 624
  let pat = conP name (map varP fnames)
625 625
  let tdname = mkName ("toDict" ++ sname)
626 626
  tdsigt <- [t| $(conT name) -> [(String, JSON.JSValue)] |]
......
680 680
loadObjectField :: Field -> Q (Name, Stmt)
681 681
loadObjectField field = do
682 682
  let name = fieldVariable field
683
      fvar = mkName name
683
  fvar <- newName name
684 684
  -- these are used in all patterns below
685 685
  let objvar = varNameE "o"
686 686
      objfield = stringE (fieldName field)
......
772 772
loadPParamField field = do
773 773
  checkNonOptDef field
774 774
  let name = fieldName field
775
      fvar = mkName name
775
  fvar <- newName name
776 776
  -- these are used in all patterns below
777 777
  let objvar = varNameE "o"
778 778
      objfield = stringE name

Also available in: Unified diff