[GHC] #14134: Implement enums for Cmm

#14134: Implement enums for Cmm -------------------------------------+------------------------------------- Reporter: niteria | Owner: (none) Type: feature | Status: new request | Priority: low | Milestone: Component: Compiler | Version: (CodeGen) | Keywords: | Operating System: Unknown/Multiple Architecture: | Type of failure: None/Unknown Unknown/Multiple | Test Case: | Blocked By: Blocking: | Related Tickets: Differential Rev(s): | Wiki Page: -------------------------------------+------------------------------------- Using ANSI C enums is documented as a preferred way of defining constants: https://ghc.haskell.org/trac/ghc/wiki/Commentary/Rts/Conventions#Syntacticde... Basically instead of writing: {{{ #define INVALID_OBJECT 0 #define CONSTR 1 }}} you would write: {{{ typedef enum { INVALID_OBJECT = 0, CONSTR = 1 } ClosureType; }}} What you get is easier debugging in gdb, perhaps even better type checking. Unfortunately some files (most vexingly `rts/storage/ClosureTypes.h`) are included in both C and Cmm and Cmm doesn't support this syntax. As far as I can tell all constants in Cmm are defined with preprocessor `#define`s. Implementing enums/constants may seem like an overkill, but I haven't found a good workaround for this. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14134 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler
participants (1)
-
GHC