hphp/system/systemlib.h (152 lines of code) (raw):

/* +----------------------------------------------------------------------+ | HipHop for PHP | +----------------------------------------------------------------------+ | Copyright (c) 2010-present Facebook, Inc. (http://www.facebook.com) | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ */ #ifndef incl_HPHP_SYSTEMLIB_H_ #define incl_HPHP_SYSTEMLIB_H_ #include "hphp/runtime/base/types.h" #include "hphp/runtime/base/tv-variant.h" #include "hphp/util/portability.h" #include <memory> namespace HPHP { struct ObjectData; struct Unit; struct Class; struct Func; struct Object; struct UnitEmitter; } //namespace HPHP namespace HPHP::SystemLib { /////////////////////////////////////////////////////////////////////////////// #define SYSTEMLIB_CLASSES(x) \ x(stdclass) \ x(Exception) \ x(BadMethodCallException) \ x(InvalidArgumentException) \ x(TypeAssertionException) \ x(RuntimeException) \ x(OutOfBoundsException) \ x(InvalidOperationException) \ x(pinitSentinel) \ x(resource) \ x(Directory) \ x(SplFileInfo) \ x(SplFileObject) \ x(DateTimeInterface) \ x(DateTimeImmutable) \ x(DOMException) \ x(PDOException) \ x(SoapFault) \ x(Serializable) \ x(ArrayAccess) \ x(ArrayIterator) \ x(IteratorAggregate) \ x(Countable) \ x(LazyKVZipIterable) \ x(LazyIterableView) \ x(LazyKeyedIterableView) \ x(CURLFile) \ x(__PHP_Incomplete_Class) \ x(DivisionByZeroException) \ x(InvalidForeachArgumentException) \ x(UndefinedPropertyException) \ x(UndefinedVariableException) \ x(TypecastException) \ x(ReadonlyViolationException) \ x(CoeffectViolationException) \ x(ModuleBoundaryViolationException) #define SYSTEMLIB_HH_CLASSES(x) \ x(Traversable) \ x(Iterator) \ x(SwitchableClass) \ /* */ extern bool s_inited; extern bool s_anyNonPersistentBuiltins; extern std::string s_source; extern Unit* s_unit; extern Unit* s_hhas_unit; extern Func* s_nullFunc; extern Func* s_nullCtor; #define DECLARE_SYSTEMLIB_CLASS(cls) \ extern Class* s_ ## cls ## Class; SYSTEMLIB_CLASSES(DECLARE_SYSTEMLIB_CLASS) #undef DECLARE_SYSTEMLIB_CLASS #define DECLARE_SYSTEMLIB_HH_CLASS(cls) \ extern Class* s_HH_ ## cls ## Class; SYSTEMLIB_HH_CLASSES(DECLARE_SYSTEMLIB_HH_CLASS) #undef DECLARE_SYSTEMLIB_HH_CLASS extern Class* s_ThrowableClass; extern Class* s_BaseExceptionClass; extern Class* s_ErrorClass; extern Class* s_ArithmeticErrorClass; extern Class* s_ArgumentCountErrorClass; extern Class* s_AssertionErrorClass; extern Class* s_DivisionByZeroErrorClass; extern Class* s_ParseErrorClass; extern Class* s_TypeErrorClass; extern Class* s_MethCallerHelperClass; extern Class* s_DynMethCallerHelperClass; Object AllocStdClassObject(); Object AllocPinitSentinel(); Object AllocExceptionObject(const Variant& message); Object AllocErrorObject(const Variant& message); Object AllocArithmeticErrorObject(const Variant& message); Object AllocArgumentCountErrorObject(const Variant& message); Object AllocDivisionByZeroErrorObject(const Variant& message); Object AllocParseErrorObject(const Variant& message); Object AllocTypeErrorObject(const Variant& message); Object AllocBadMethodCallExceptionObject(const Variant& message); Object AllocInvalidArgumentExceptionObject(const Variant& message); Object AllocTypeAssertionExceptionObject(const Variant& message); Object AllocRuntimeExceptionObject(const Variant& message); Object AllocOutOfBoundsExceptionObject(const Variant& message); Object AllocInvalidOperationExceptionObject(const Variant& message); Object AllocDOMExceptionObject(const Variant& message); Object AllocDivisionByZeroExceptionObject(); Object AllocDirectoryObject(); Object AllocPDOExceptionObject(); Object AllocSoapFaultObject(const Variant& code, const Variant& message, const Variant& actor = uninit_variant, const Variant& detail = uninit_variant, const Variant& name = uninit_variant, const Variant& header = uninit_variant); Object AllocLazyKVZipIterableObject(const Variant& mp); Object AllocLazyIterableViewObject(const Variant& iterable); Object AllocLazyKeyedIterableViewObject(const Variant& iterable); [[noreturn]] void throwExceptionObject(const Variant& message); [[noreturn]] void throwErrorObject(const Variant& message); [[noreturn]] void throwArithmeticErrorObject(const Variant& message); [[noreturn]] void throwArgumentCountErrorObject(const Variant& message); [[noreturn]] void throwDivisionByZeroErrorObject(const Variant& message); [[noreturn]] void throwParseErrorObject(const Variant& message); [[noreturn]] void throwTypeErrorObject(const Variant& message); [[noreturn]] void throwBadMethodCallExceptionObject(const Variant& message); [[noreturn]] void throwInvalidArgumentExceptionObject(const Variant& message); [[noreturn]] void throwTypeAssertionExceptionObject(const Variant& message); [[noreturn]] void throwRuntimeExceptionObject(const Variant& message); [[noreturn]] void throwOutOfBoundsExceptionObject(const Variant& message); [[noreturn]] void throwInvalidOperationExceptionObject(const Variant& message); [[noreturn]] void throwDOMExceptionObject(const Variant& message); [[noreturn]] void throwDivisionByZeroExceptionObject(); [[noreturn]] void throwSoapFaultObject(const Variant& code, const Variant& message, const Variant& actor = uninit_variant, const Variant& detail = uninit_variant, const Variant& name = uninit_variant, const Variant& header = uninit_variant); [[noreturn]] void throwInvalidForeachArgumentExceptionObject(); [[noreturn]] void throwUndefinedPropertyExceptionObject(const Variant& message); [[noreturn]] void throwUndefinedVariableExceptionObject(const Variant& message); [[noreturn]] void throwTypecastExceptionObject(const Variant& message); [[noreturn]] void throwReadonlyViolationExceptionObject(const Variant& message); [[noreturn]] void throwCoeffectViolationExceptionObject(const Variant& message); [[noreturn]] void throwModuleBoundaryViolationExceptionObject(const Variant& message); /** * Register a persistent unit to be re-merged (in non-repo mode) */ void addPersistentUnit(Unit* unit); /** * Re-merge all persistent units */ void mergePersistentUnits(); /* * Setup the shared null constructor. */ void setupNullCtor(Class* cls); /* * Return a fresh 86reifiedinit method. */ Func* getNull86reifiedinit(Class* cls); /////////////////////////////////////////////////////////////////////////////// /* * Keep a list of unit-emitters for systemlib units. Used by HPHPc so * it can put the unit-emitters into the repo. */ void keepRegisteredUnitEmitters(bool); void registerUnitEmitter(std::unique_ptr<UnitEmitter>); std::vector<std::unique_ptr<UnitEmitter>> claimRegisteredUnitEmitters(); /////////////////////////////////////////////////////////////////////////////// } // namespace HPHP::SystemLib #endif