
#14375: Implement with# primop -------------------------------------+------------------------------------- Reporter: simonpj | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.2.1 Resolution: | Keywords: JoinPoints Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: #14346 | Differential Rev(s): ​Phab:D4110 Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): I think I was going too fast. Let's try this instead: * `maskAsyncExceptions#` is allowed to have `\s.e` as its argument. Perhaps even required. * The codegen looks like {{{ cgExpr (maskAsyncExceptions (\s.e) s2) = do { emit (mask frame) ; bind s:=s2 (cgExpr e) } }}} Essentially just push the stack frame and carry on with e. For the "exception handler" argument for `catch#`, a join might make more sense. But the "main event" argument for `catch#` should work as above. Does that make more sense? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14375#comment:7 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler