As of f3385a, precompile.pike seems to assume that strings are
eight-bit by default. Consequently, the String.SingleReplace class
(defined in builtin.cmod as single_string_replace and used
automatically to optimize calls to "replace(variable, constant,
constant)") chokes on wide strings:
$ pike
Pike v8.1 release 2 running Hilfe v3.5 (Incremental Pike Frontend)
> String.SingleReplace("\u1234","1");
Bad argument 1 to create(). Expected string|void.
Unknown program: create("\u1234","1")
-:1: _static_modules.Builtin()->single_string_replace()->create("\u1234","1")
HilfeInput:1: HilfeInput()->___HilfeWrapper()
> replace("Hello, world!","!","\u1234");
(1) Result: "Hello, world\u1234"
> string x="Hello, world!";
> replace(x,"!","\u1234");
Compiler Warning: 1: Optimizer failure in replace().
Compiler Warning: 1: Bad argument 2 to create(). Expected string|void.
(2) Result: "Hello, world\u1234"
It does appear to be functional (presumably by falling back on the
unoptimized version), but it looks as if this could have consequences
elsewhere. Thoughts?
ChrisA