We'd like to start using ##mixed## instead of ##var## for attribute types to be consistent with Hack. As a followup to this (once released), we would codemod all ##var## to ##mixed##.
When object support was first added to HHVM, a class named "Instance"
was introduced (deriving from ObjectData) to represent instances of user
defined classes. Since then, things have evolved and HPHPc and HPHPi have
been retired, and now there really is no needed to have ObjectData and
Instance be separate classes anymore.
As a first step towards merging ObjectData and Instance together, this diff
puts their definitions in the same .h file and puts their implementations
in the same .cpp file. A few small changes were necessary to fix issues
with cyclical includes: (1) Repo/emitter related parts of class.cpp and
class.h were moved to class-emit.cpp and class-emit.h; (2) the contents of
"vm/core_types.h" was moved to "base/types.h"; and (3) a few functions that
didn't appear to be hot were moved from .h files and the corresponding .cpp
files.
Some simple changes for HPHP to help make it clang friendly
---hphp/compiler/package.cpp
---hphp/compiler/package.h
---hphp/runtime/ext/ext_curl.cpp
---hphp/runtime/ext/pdo_mysql.cpp
---hphp/tools/tc-print/offline-x86-code.h
---hphp/util/async_func.cpp
---hphp/util/async_func.h
---hphp/util/compression.cpp
---hphp/util/compression.h
---hphp/util/db_conn.cpp
---hphp/util/db_conn.h
Deleted unused private fields
~~~hphp/compiler/analysis/symbol_table.h
Static assert had to be outside the union
+++hphp/runtime/TARGETS
Added clang specific flag to supress unneded declaration warning
~~~hphp/runtime/base/datatype.h
Use of logical '&&' with constant operand. Added !=0 to remove warning,
~~~hphp/runtime/base/string_data.h
Static fields cannot be declared in an anonymous struct/union
~~~hphp/runtime/ext/bcmath/TARGETS
Moved gcc specific flag from preprocessor_flags to compiler_specific_flags
~---hphp/runtime/ext/pdo_mysql.cpp
Removed unnecessary self asignment for row_count
~~~hphp/runtime/vm/bytecode.h
Added default return statement
~---hphp/runtime/vm/jit/codegen.cpp
spillSlotsToSize was unused
~~~hphp/runtime/vm/jit/irtranslator.cpp
~~~hphp/runtime/vm/jit/linearscan.cpp
The c++ standard states default arguments shall not be specified in the
parameter-declaration-clause of a lambda-declarator.
~~~hphp/runtime/vm/jit/vectortranslator-internal.h
Clang had some issues determining the correct cast when these macros were used
A simple '!= 0' check was added to make things explicit for clang.
~~~hphp/tools/tc-print/perf-events.h
Added parens to make clang happy
+++hphp/util/asm-x64.h
The constexpr needed to be initialized
+++hphp/util/base.h
Clang also supports tr1 libraries
~~~hphp/util/bits.h
Again, clang had issues with implicit casting to bool.
added != 0 check
~~~hphp/util/malloc_size_class.h
Ambiguous operator precedence. Added parentheses.
~~~hphp/util/thread_local.h
Misspelled function
GetStaticString() is now the only way to get a static string,
so enforce it and short-circuit out when asking for an already-
static string.
Add a GetStaticString(data,len) overload and up some dead code along the way.
Elide refcounting for non-refcounted TVs in SharedVariant.
Additionally for apc_store, if TV is a static string, use
the static version insted of the given one.
I was learning from @jdelong and he said that you should use
double quotes for local includes and angle brackets for library
includes. I asked why our code was the way it was, and he said he wanted
to clean it up. I beat him to it :)
Conflicts:
hphp/runtime/base/server/admin_request_handler.cpp
hphp/runtime/vm/named_entity.h
Equals is faster in a few ways.
(1) no call to memcmp unless string sizes are the same
(2) does a fast check for either of the strings being static
before any calls to is_numeric_string
This gets rid of the (litstr) StringData and StackStringData
constructors, but keeps String(litstr). Also rename all
the instances of AttachLiteral to CopyString, since they now
mean the same thing.
And, remove the IsLiteral string kind. This removes the hazard of
creating a string whose data is freed before the string. Callsites
passing in a literal should use StaticString. Everything else
can use CopyString or AttachString.
Make the targetcache the one true home for constants,
so we dont need to (also) insert them all into
VMExecutionContext::m_constants (which is now gone).
By also making "non-volatile" constants persistent, we save
initializing most of them at all in RepoAuthoritative mode.
While I was working on the TestCodeRun refactor I found two tests about Tainted code. I looked into it and coulnd't get HHVM to compile with TAINTED=1. Then I checked and none of the extension functions we exposed about tainting were used in WWW. Scratching my head I asked, @srenfro and @jdelong, who thought it was dead. So I killed this zombie.
If you allocate a StringData on the stack, and it escapes,
you're in trouble. Make the destructor assert by default,
and add a StackStringData which does the appropriate
refCounting and checking.
This change is mostly for FB internal organizational reasons.
Building is not effected beyond the fact that the target now
lands in hphp/hhvm/hhvm rather than src/hhvm/hhvm.