make EvilSplicer re-box file-embed's ByteStrings
The armel autobuilder started failing: Assistant/WebApp/Types.hs:128:14: primitive string literal must contain only characters <= '\xFF' This fixes that.
This commit is contained in:
parent
96d22a4bac
commit
4dd6938850
2 changed files with 38 additions and 0 deletions
|
@ -310,6 +310,7 @@ mangleCode = flip_colon
|
|||
. yesod_url_render_hack
|
||||
. text_builder_hack
|
||||
. nested_instances
|
||||
. boxed_fileembed
|
||||
. collapse_multiline_strings
|
||||
. remove_package_version
|
||||
. emptylambda
|
||||
|
@ -553,6 +554,42 @@ mangleCode = flip_colon
|
|||
- The ; is added by case_layout. -}
|
||||
flip_colon = replace "; : _ " "; _ : "
|
||||
|
||||
{- Embedded files use unsafe packing, which is problimatic
|
||||
- for several reasons, including that GHC sometimes omits trailing
|
||||
- newlines in the file content, which leads to the wrong byte
|
||||
- count. Also, GHC sometimes outputs unicode characters, which
|
||||
- are not legal in unboxed strings.
|
||||
-
|
||||
- Avoid problems by converting:
|
||||
- GHC.IO.unsafePerformIO
|
||||
- (Data.ByteString.Unsafe.unsafePackAddressLen
|
||||
- lllll
|
||||
- "blabblah"#)),
|
||||
- to:
|
||||
- Data.ByteString.Char8.pack "blabblah"),
|
||||
-
|
||||
- Note that the string is often multiline. This only works if
|
||||
- collapse_multiline_strings has run first.
|
||||
-}
|
||||
boxed_fileembed :: String -> String
|
||||
boxed_fileembed = parsecAndReplace $ do
|
||||
i <- indent
|
||||
void $ string "GHC.IO.unsafePerformIO"
|
||||
void newline
|
||||
void indent
|
||||
void $ string "(Data.ByteString.Unsafe.unsafePackAddressLen"
|
||||
void newline
|
||||
void indent
|
||||
void number
|
||||
void newline
|
||||
void indent
|
||||
void $ char '"'
|
||||
s <- restOfLine
|
||||
let s' = take (length s - 5) s
|
||||
if "\"#))," `isSuffixOf` s
|
||||
then return (i ++ "Data.ByteString.Char8.pack \"" ++ s' ++ "\"),\n")
|
||||
else fail "not an unboxed string"
|
||||
|
||||
{- This works around a problem in the expanded template haskell for Yesod
|
||||
- type-safe url rendering.
|
||||
-
|
||||
|
|
|
@ -32,6 +32,7 @@ import qualified Network.Wai as Network.Wai.Internal
|
|||
import qualified Yesod.Core.Types
|
||||
import qualified GHC.IO
|
||||
import qualified Data.ByteString.Unsafe
|
||||
import qualified Data.ByteString.Char8
|
||||
{- End EvilSplicer headers. -}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue