on master help sign in
Detect unbox in Opt.Destructor generation
commit14fc72db087876b32f6e1780ddd580578e658e14 authorEvan Czaplicki <evancz@users.noreply.github.com> dateMon 29 Jan 2018, 23:02 (9 years ago) parentba5d0c0
1 file changed+14−6
src/Optimize/Expression.hs+14−6
src/Optimize/Expression.hs+14−6
@@ -283,14 +283,22 @@ destructHelp path (A.At region pattern) revDs =
283283 Can.PInt _ ->
284284 pure revDs
285285
286− Can.PCtor _ _ _ _ _ args ->
287− case path of
288− Opt.Root _ ->
289− foldM (destructCtorArg path) revDs args
286+ Can.PCtor _ _ (Can.Union _ _ _ opts) _ _ args ->
287+ case args of
288+ [Can.PatternCtorArg i _ arg] ->
289+ case opts of
290+ Can.Normal -> destructHelp (Opt.Index i path) arg revDs
291+ Can.Unbox -> destructHelp (Opt.Unbox path) arg revDs
292+ Can.Enum -> destructHelp (Opt.Index i path) arg revDs
290293
291294 _ ->
292− do name <- Names.generate
293− foldM (destructCtorArg (Opt.Root name)) (Opt.Destructor name path : revDs) args
295+ case path of
296+ Opt.Root _ ->
297+ foldM (destructCtorArg path) revDs args
298+
299+ _ ->
300+ do name <- Names.generate
301+ foldM (destructCtorArg (Opt.Root name)) (Opt.Destructor name path : revDs) args
294302
295303
296304destructTwo :: Opt.Path -> Can.Pattern -> Can.Pattern -> [Opt.Destructor] -> Names.Tracker [Opt.Destructor]