In many compilers, control flow is represented using an arbitrary directed graph. But in some interesting target languages, including JavaScript and WebAssembly, intraprocedural control flow can be expressed only in structured ways, using loops, conditionals, and multilevel breaks or exits. As has long been known, arbitrary control flow can be translated into structured control flow [Peterson, Kasami, and Tokura 1973]. The translation uses two standard analyses, but as published, it takes three passes—which may explain why it was overlooked by Emscripten, a compiler that is widely used to translate C to JavaScript [Zakai 2011]. By tweaking the analyses and by applying fundamental ideas from functional programming (recursive functions and immutable abstract-syntax trees), the translation can be implemented in a single pass—along with a couple of code improvements. This new implementation is slated to be added to the Glasgow Haskell Compiler. Its single-pass translation, its immutable representation, and its use of dominator trees make it much easier to reason about than the original translation.