This is an incremental step towards moving it all the way
to hphp/server. This flattens base but doesn't untangle
the server files from lib_hphp_runtime
In HHVM (and HPHPc before it) we've been piggybacking resources on the
KindOfObject machinery. At the language level, resource is considered to
be a different type than object, and there are a number of differences
in behavior between objects and resources (ex. resources don't allow for
dynamic properties, resources don't work with the clone operator, the
"(object)" cast behaves differently for resources vs. objects, etc).
Piggybacking resources on the KindOfObject machinery has some downsides.
Code that deals with KindOfObject values often needs to check if the value
is a resource and go down a different code path. This makes things harder
to maintain and harder to keep parity with Zend. Also, these extra branches
hurt performance a little, and they make it harder for the JIT to do a good
job in some cases when its generating machine code that operates on objects.
This diff prepares the code base for a new KindOfResource type by adding a
new "Resource" smart pointer type (currently a typedef for the Object smart
pointer type) and it updates the C++ code and the idl files appropriately.
This diff is essentially a cosmetic change and should not impact run time
behavior. In the next diff (part 2) we'll actually add a new KindOfResource
type, detach ResourceData from the ObjectData inheritence hierarchy, and
provide a real implementation for the Resource smart pointer type (instead
of just aliasing the Object smart pointer type).
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
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
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.
unserialize() and call_user_func_array() were straightforward. They were
called from all over the runtime, but I renamed those implementations
and codemodded the runtime.
The is_* functions were only ever being called by the CVarRef signature,
so I deleted all the other ones (same for f_gettype). Only some of the
is_* functions were being called from the runtime, so I made inline
versions of those without the f_ prefix.
When a callback throws an exception, we catch it, and then handle
the exception after the libcurl function that invoked the callback
returns.
But we weren't checking the exception after some libcurl calls that
could invoke callbacks, which leaked the exception object in RELEASE
builds, and asserted in DEBUG builds.
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.