Fixed iOS build after *T removal
librustc: Remove the `&LIFETIME EXPR` production from the language.

This was parsed by the parser but completely ignored; not even stored in
the AST!

This breaks code that looks like:

    static X: &'static [u8] = &'static [1, 2, 3];

Change this code to the shorter:

    static X: &'static [u8] = &[1, 2, 3];

Closes #15312.

[breaking-change]
trans::foreign: Simplify some code by using our builder impl
add a missing closing parens
windows: Unicode console support.
Adds a WindowsTTY for libnative that converts between UTF-8 and UTF-16.

Signed-off-by: Peter Atashian <retep998@gmail.com>
auto merge of #15051 : retep998/rust/master, r=alexcrichton

This implementation does have the minor issue of not handling things correctly when a codepoint is split across multiple writes or reads, but its better than not having unicode support at all.

Adds a Windows specific struct `WindowsTTY` in `libnative` and make `tty_open` create that struct on Windows. Adds needed functions and constants to `c_win32.rs`.

Libuv still needs to be updated before #15028 can be closed.
auto merge of #15404 : vhbit/rust/ios-ptr-fixes, r=pcwalton
serialize: Remove allocations from escaping strs and indenting spaces
auto merge of #15405 : pcwalton/rust/delifetime, r=nick29581

This was parsed by the parser but completely ignored; not even stored in
the AST!

This breaks code that looks like:

    static X: &'static [u8] = &'static [1, 2, 3];

Change this code to the shorter:

    static X: &'static [u8] = &[1, 2, 3];

Closes #15312.

[breaking-change]

r? @nick29581
auto merge of #15412 : dotdash/rust/builder, r=alexcrichton
serialize: escaping json strings should write in batches.

This significantly speeds up encoding json strings.
auto merge of #15415 : dgoon/rust/master, r=alexcrichton
serialize: speed up json pretty printing by batch writing spaces
auto merge of #15419 : erickt/rust/json, r=pcwalton

This speeds up json serialization by removing most of the allocations.
Refactored VecPerParamSpace to hide exposure of `Vec` representation.

This basically meant changing the interface so that no borrowed `&Vec`
is exposed, by hiding `fn get_vec` and `fn get_mut_vec` and revising
`fn all_vecs`.

Instead, clients should use one of the other methods; `get_slice`,
`pop`, `truncate`, `replace`, `push_all`, or `is_empty_in`, which
should work for any case currently used in rustc.
Revise `VecPerParamSpace` to use a one Vec rather than three.

In my informal measurements, this brings the peak memory usage when
building librustc from 1662M down to 1502M.  Since 1662 - 1502 = 160,
this may not recover the entirety of the observed memory regression
(250M) from PR #14604.  (However, according to my local measurements,
the regression when building librustc was more like 209M, so perhaps
this will still recover the lions share of the lost memory.)