Allow replacing the file:// wrapper in a script

Summary: PHP5 started supporting this, so let's follow along.

Closes #2477

Reviewed By: @fredemmott

Differential Revision: D1287000
fix soap encoding on non-nillable empty properties

Summary: Issue 1: When having an existing SOAP class property that is not
initialized (private $prop), PHP encodes it into an empty element: even
if the WSDL does not set the "nillable" flag for the element. We must
check if the property exists, not just if the returned property isNull.
The following php-src file should make that clear:
https://github.com/php/php-src/blob/PHP-5.6/ext/soap/php_encoding.c#L1697

Issue 2: HHVM simply checks for an incorrect object type: String instead
of Object (and then grabbing its class name). Very obvious:
https://github.com/php/php-src/blob/PHP-5.6/ext/soap/php_encoding.c#L464

Not sure how to create a proper test for this:
- the majority of bad zend tests are currently being skipped
- all good zend tests pass
- HHVM itself only provides 3 tests that focus on SoapServer instead.
- I'd have to find a way to reduce my current setup (3rd-party SOAP
  server, abstracted client) into a small example.

Hopefully you can forgive the lack of a test this time, the 2 php-src
links above should convince you.
Closes #2505

Reviewed By: @fredemmott

Differential Revision: D1288053
Corrected error messages relating to array_column and default values

Summary: This diff is based on D1199090, with corrections to tests, it corrects the error messages given to the user when a method expects a minimum set of parameters but less are given.

Reviewed By: @sgolemon

Differential Revision: D1282695
Fix bug in xhp parsing

Summary: Previously the parser would look at
<foo><bar><baz>...</baz></bar></foo>
and return an Xhp consisting only of <foo></foo>
because it was confusing a child element's children
with child elements.

Reviewed By: @pikatchu

Differential Revision: D1277038
Make compress.zlib support wrapping other URIs

Summary: tl;dr: compress.zlib://foo.bar:///should/work/too

refs guzzle/guzzle#538

Reviewed By: @sgolemon

Differential Revision: D1285195
Fix passing null as an object param to builtins

Summary: fixes both explicit and default null (as opposed to null_object)

Closes #1399

Reviewed By: @swtaarrs

Differential Revision: D1123862
ignore_errors means ignore server errors, not all errors

Summary: refs guzzle/guzzle#538

Reviewed By: @sgolemon

Differential Revision: D1285439
Track decrefd locals state explicitly.

Summary: There is only one possible situation in which unwinder can see frame
with already decrefd locals -- when exit hook fails.

This can happen either because user profiler failed, or because exit
hook rethrows pending fatal (and who knows what in the future).

Let's add a flag to the ActRec indicating whether the locals were
already decrefd. This flag is set and checked only from slow paths, so
performance is not affected.

Allows introduction of opcodes that may throw before locals are decrefd.
Will be used by Await opcode.

Reviewed By: @edwinsmith

Differential Revision: D1288193
More ir guard relaxation cleanup

Summary: We were already mostly doing this, but this diff formalizes the fact
that AssertLoc|CheckLoc's typeParam is intersected with the input type of the
local to get the output type of the local. Now that all the Assert ops have
this behavior, we can trivially keep around apparently useless Assert ops that
could become useful after guard relaxation. This allowed me to eliminate the
not-quite-sound TypeConstraint::assertedType logic.

Reviewed By: @ottoni

Differential Revision: D1282956
Fix IR generation for InitThisLoc

Summary: We weren't decreffing the old value of the local, and doing
InterpOne(ThisInitLoc) would return a Gen instead of a Cell, tripping
asserts about locals not being Gens.

Reviewed By: @swtaarrs

Differential Revision: D1287682
Add CakePHP3: 96.67%

Summary: peanut-butter-jelly-time

Reviewed By: @JoelMarcey

Differential Revision: D1289291
Make GenReadApi covariant

Summary: GenReadApi is the API we expose for fetching multiple ids from a datastore. Currently we cannot type check hierarchies because GenReadApi is invariant. We need GenReadApi to be covariant so GenReadApi<token, Child> is a subtype of GenReadApi<token, Parent>.

Reviewed By: @elgenie

Differential Revision: D1287804
Strip namespace from OutlineView

Reviewed By: @jwatzman

Differential Revision: D1287462
Fix Autocomplete globals for namespaces

Summary: First, strip the slashes from the start of the results when we print them.

This is actually sufficient to keep things working for those who aren't using namespaces.

For those that are, they could either be trying to complete something in a namespace, but haven't gotten to the \ yet, or they could be trying to compete something that isn't in the namespace.

So for matching, we strip namespace on both the user input and on the class/fun name.

Reviewed By: @jwatzman

Differential Revision: D1287557
Fix identify function for namespaces

Reviewed By: @jwatzman

Differential Revision: D1287579
Update docs for LdLoc and LdLocAddr

Summary: Recently changed so that they no longer have valSrc as a part of
their extra data.

Reviewed By: @swtaarrs

Differential Revision: D1289435
Fix Find Refs For Namespaces

Summary: Add namespace to the string we're matching for find references. Strip it from the result set if we need to.

I really need to find time to set up unit tests for this feature.

Reviewed By: @jwatzman

Differential Revision: D1287144
hh_client --refactor. Command line refactoring tool

Summary: A simple command line tool that uses find references to rename classes, methods, and functions.

It is very fast.

I had to add a flag to find references for whether to include definitions or not in order to get the rename correctly.

How this works is:
-User runs hh_client --refactor and follows the prompts to specify and class, function, or method name, and a new name for it.
-hh_client asks hh_server for Patches of either insert, remove, or replace.
-hh_server uses runs find references and uses those locations as the positions for replace operations. Those locations are replaced by the new string specified by the user.
-hh_client sorts these by file, and then by order.
-One by one, hh_client opens each of those files, reads them into a Buffer, then makes a new string where the text at each Pos has been replaced by the string specified by the user. The hh_client writes this to the file. This works nicely because it doesn't require a pretty printer and doesn't change the file in any way other than how was specified.
-Done.

Reviewed By: @pikatchu

Differential Revision: D1204434
Fix printing of types for autocomplete, autocomplete argument tooltips, and type at position after namespace change

Summary: Add a new function for us to call, Typing_print.full_strip_ns.

The implementation of this is a little cheesy. It gets called whenever we actually add something to the buffer, instead of when we're adding something that could be a namespace. Seems like the refactoring to pass something around in there for stripping/or not or duplicating a bunch of code isn't worthwhile, so I did it this way.

Reviewed By: @jwatzman

Differential Revision: D1289853
Misc fixes for type-system/interp.

Summary: Some fixes to type-system/interp:

1. Resolve method calls for optional objects whose class is known.
Currently, we were resolving method calls only for objects that could
not be null.

2. Fix union_of for union types such as OptInt, OptDbl, OptSStr. With
this, union_of(OptInt=1, OptInt=2) is OptInt, instead of OptNum, etc.

Reviewed By: @jdelong

Differential Revision: D1288105