Provide an API to store an APC key without the TTL adjustment applied.

Why do I need that?
On devservers I need to be able to store certain APC keys without them
being automatically evicted when the TTLLimit expires, i.e. to simulate
the "primed" behavior in sandboxes, which don't have apc_prime.so.
The  cost of rebuilding these keys can negatively impact the sandbox
performance.

The function name is intentionally scary do discourage the unintentional
use (which mimics the www conventions).

Reviewed By: @dariorussi

Differential Revision: D1016718
Revert "[hphp] make 'abstract async' syntax error only behind !(whole program)"

We're still not ready for this.

Reviewed By: @elgenie
Create file cache as 0664, not 0600

Match mode for file cache relative to original code

Reviewed By: @emiraga

Differential Revision: D1022126
CGetL2 looks past a StackElem, not a Gen

IR translation for CGetL2 was assuming the top element on the stack was
a Gen, but it can also be a Cls. StackElem unifies these two types, and
is what we want.

Reviewed By: @swtaarrs

Differential Revision: D1022105
Implement codegen for UnpackCont in ARM mode

UnpackCont is troublesome to interp-one; it doesn't even work in x64
mode. It translates to a single IR instruction, so this just implements
codegen for that.

In the process of debugging, I discovered that the stack-chasing for
UnpackCont was getting the order of its stack outputs wrong.

Reviewed By: @edwinsmith

Differential Revision: D1020297
Fix issue with composer timing out on downloading dependencies and fix deadlocking

- Fix issue with composer timing out on downloading dependencies
- Try to reduce or eliminate deadlocking by using individual repos for each framework run
- Add Mediawiki to the frameworks; Remove typo3 since the tests are running correctly
- Simplified the expect files to just have test and status
- Other modifications

I have decided I need to refactor this thing a bit. May try to parallelize it more. Probably make some classes. Etc. For example, I should add a --jit and --nojit mode, probably.

Reviewed By: @ptarjan

Differential Revision: D1022337
Make array_diff and array_diff_key work with collections

This diff reimplements array_diff() and array_diff_key() to be more
performant and to support collections.

The new implementation is more than 5x faster the old implementation on a
number of micro-benchmarks I tried, with some of the micro-benchmarks
showing as much as a 40x improvement.

Reviewed By: @dariorussi

Differential Revision: D1019693
fix ASAN bug in JSON parser

Wow, our json parser has diverged so much from zend. This is basicaly what theirs does. More importantly, this is correct.

Sadly I don't think is the memory corruption bug.

Reviewed By: @scannell

Differential Revision: D1021678
Don't trace through IncRef for SpillStack

This can cause mismatched IncRef/DecRef pairs in the IR.

Reviewed By: @swtaarrs

Differential Revision: D1022881
send all Logger output to stderr

Prior to this change, Logger::Info and Logger::Verbose were going to
stdout, which can easily break scripts.

I didn't see any Logger::Info or Logger::Verbose call sites, which assume that
their output is going to stdout.

Reviewed By: @paroski

Differential Revision: D962372
Implement function prologues in ARM

This is mainly what's holding us back in test/quick. There's a lot of
stuff going on here:

- Adding code-gen-helpers-arm.cpp. There's a practical need for this:
  we're starting to write out a lot of calls to C++ functions, which
  should be abstracted out because it happens differently depending on
  whether we're simulating ARM or running on native ARM.

- Initialize rStashedAR when starting the simulator. This was a bug.

- Change the order of pushing x29 and x30 around calls to properly mimic
  the x64 stack frame.

- Implement fcallHelperThunk.

- Templatize a couple of vixl functions to let us move pointers into
  registers without reinterpret_cast. Also fill the simulator stack with
  junk before starting up a simulator; in an early version of this diff
  we were actually reading from the stack out-of-bounds. It wasn't
  causing any bugs, but let's get out ahead of that.

Reviewed By: @jdelong

Differential Revision: D1019980
Implement unconditional jump smashing on ARM; fix lolbug

There were two problems. First, jmpTarget() wasn't recognizing jumps
properly because I was looking at the wrong instruction bits. Then,
smashing unconditional jumps wasn't implemented.

Reviewed By: @jdelong

Differential Revision: D1021956
row_count properly set on INSERT/UPDATES

Fixes bug due to variable shadowing

Closes #364

Reviewed By: @JoelMarcey

Differential Revision: D1021780

Pulled By: @scannell
Link against libpam if it's available

The logic looking at c-client's linkage.h file is too clever. (hah)
Just follow PHP's example and always link it when possible.

Closes #1181
Use hints instead of trace to order blocks in postorderWalk()

postorderWalk() chooses which successor blocks to visit based on
trace; it visits main->exit edges first, to bias towards visiting
them sooner.  (So they'll be later in reverse-postorder).
This diff uses block hints instead.  This will result in slightly
different order for if/then/else regions with an Unlikely arm, that
were entirely on the same trace.  But it should be equivalent for
main->exit edges since exit blocks are all marked Unlikely.

Reviewed By: @jdelong

Differential Revision: D1022275
Partial de-trace-ification of DCE

Some cleanup of DCE, attempting to get rid of IRTrace where
it's not needed.  A lot of DCE deals explicitly with traces so I'll
leave that for the another diff.

Reviewed By: @edwinsmith

Differential Revision: D1023480
Add an unsupported case in scalar array emission

If you don't run some of the optimization passes, sometimes
scalar arrays from UnaryOpExpression will have sub-members that are
other UnaryOpExpressions, which isn't handled here.  It looks like
getScalarValue is there for this.

Reviewed By: @edwinsmith

Differential Revision: D1017234
Make Fatal take only a single OA arg

This was a little more convenient for the bytecode
representation I'm using (it's nice but not critical that all opcodes
with subops only have a single subop).  Also hook up to assembler
while here.

Reviewed By: @alexmalyshev

Differential Revision: D1022933
A few bytecode spec tweaks (relating to FPI, cuf iters)

It's not explicitly listed, but we can't have Catch, Fault or
DV entry offsets inside of FPI regions, so I added that.  Also update
a little bit about Cuf iters.

Reviewed By: @edwinsmith

Differential Revision: D1019493
import mongo extension

This is the biggest extension on pecl. Most of their tests depend on a server implementation which I don't really want to package into our test infra yet.

Many of the tests don't pass, but I want to get this up for review with the passing tests since i think many of the changes are good.

Reviewed By: @paroski

Differential Revision: D979397