Hide 0Closure variable from getDefinedVariables

Summary: Closures have an internal variable "0Closure" that points to the last
defined function. Previously, calls to get_defined_vars would return
this (and php5 didn't). This modifies VarEnv::getDefinedVariables so
that the "0Closure" variable is not included.

Reviewed By: @jano

Differential Revision: D1401578
Better error message when timing out

Reviewed By: @aryx

Differential Revision: D1438431
autocomplete json, add information about variadics

Summary: There are two types of variadics

  function t2(int $a, string ...$a);
  function t1(int $a, ...);

Respective outputs are

            "params": [
                {
                    "name": "$a",
                    "type": "int",
                    "variadic": false
                },
                {
                    "name": "$args",
                    "type": "string",
                    "variadic": true
                }
            ],

and

            "params": [
                {
                    "name": "$a",
                    "type": "int",
                    "variadic": false
                },
                {
                    "name": "",
                    "type": "_",
                    "variadic": true
                }
            ],

Reviewed By: @joelbeales

Differential Revision: D1437768
Move instead of deleting old server log

Summary: This should help debug server crashes that are only noticed
after a new server has already been started.

Reviewed By: @aryx

Differential Revision: D1438423
removed a bad assert that could potentially fail

Summary: When an ArrayObject or ArrayIterator is cast to an array the convert_to_array function would grab the storage property of the array and return the value. If someone used reflection to make the storage property visible then unset the property an assert would be tripped in the convert_to_array function.

Reviewed By: @ptarjan

Differential Revision: D1419817
Get rid of compatibility exit in emitJmpHelper

Summary: As t3730079 says, this turns out to be redundant with the fallthrough logic in translateRegion, and that's a better place to centralize this decision.

Reviewed By: @ottoni

Differential Revision: D1434790
Allow merging FrameStates with different local types

Summary: We already union the local types in FrameState::merge(). So,
FrameState::compatible() should not need to check for equality
of local types.

Reviewed By: @ottoni

Differential Revision: D1399916
Expose single-block loops

Summary: Even with Eval.JitLoops=true, loops with a single region block weren't
being exposed.  This diff adds those backedges if appropriate.

Reviewed By: @alexmalyshev

Differential Revision: D1431761
Add support to HHBBC for marking all functions interceptable

Summary: Will be turned on when you set the compile-time option to enable
rename function.  At repo build time, will add AttrInterceptable to every
function, so you don't need to specify EnableRenameFunction at run time.

Reviewed By: @markw65

Differential Revision: D1434019
Clean up CONTRIBUTING.md

Summary: CONTRIBUTING.md was mostly a duplicate of a section in README.md. I
deduped the content, cutting the README.md section down to a link to
CONTRIBUTING.md. I also reordered and cleaned up some of the text in
CONTRIBUTING.md.

Closes #3205
Created from: https://github.com/facebook/hhvm/pull/3205

Reviewed By: @ptarjan

Differential Revision: D1439724
bump third-party submodule hash
Merge pull request #3208 from dcsommer/master

bump third-party submodule hash
Add quick jit to framework test runner

Summary: Todo in separate diffs:
 - investigate why FB build has some test failures when run this way, but OSS doesn't (same for quickinterp)

Reviewed By: @LiraNuna

Differential Revision: D1438880
Move ti/proxygen/lib to proxygen/lib

Summary: As in title. This is where proxygen lives now.

Reviewed By: praveenr

Differential Revision: D1439906
Add intra-trans arcs when building wholecfg region

Summary: When I wrote the wholecfg selector I missed the fact that the "input"
regions can have internal arcs -- for instance, when inlining has happened.
Bringing these arcs in solves some weird problems that were popping up in the
repo-mode unit tests.

Reviewed By: @ottoni

Differential Revision: D1439318
Change return type of LdRef to InitCell

Summary: Boxes can't contain Uninit.

Reviewed By: @swtaarrs

Differential Revision: D1436506
Corrected the debug output and classname of Closure objects to match php

Summary: our output of `var_dump` and `get_class` of closure objects was different tan php's. Correcting it made several bad zend tests pass!

Reviewed By: @ptarjan

Differential Revision: D1402833
Share errors for abstract trait methods and interfaces

Summary: Abstract trait methods were not checked for same compliance as interfaces. Found via a bad zend test

Reviewed By: fredemmott, eletuchy

Differential Revision: D1395699
Fixed Issue Tracker Link

Summary: The current link will redirect here, but it would make more sense to just put the correct link in the first place.
Closes #3212
Created from: https://github.com/facebook/hhvm/pull/3212

Reviewed By: @fredemmott

Differential Revision: D1441564
Unbreak DynamicYield in javascript

Summary: js_of_ocaml doesn't provide the Str library, so ages ago, somebody made a fake one so our existing code still worked.

Unfortunately, the javascript regexp library uses javascript's syntax for regexes, instead of ocaml syntax.

Because of this, DynamicYield has never worked in FBIDE. This used to be ok for typechecking, because we'd never bring in every dependency from Hack, so it would just assume these methods were defined in PHP. (So nobody ever caught it.) It's never worked for autocomplete (but I never realized that it *should* work for autocomplete)

There's no library method to convert regexes from ocaml to js format, so I did a terrible hack that makes this work for us. (I admit this is awful :( )

We're only using Str regex stuff for dynamic yield in javascript, so I was able to verify that this fixes it.

The problem for our regexes is that in ocaml, you escape ( and ) to indicate that they're a matching group, while in javascript, you do not.

Reviewed By: @jwatzman

Differential Revision: D1440297