/** * This file is part of the Zephir. * * (c) Phalcon Team * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. If you did not receive * a copy of the license it is available through the world-wide-web at the * following url: https://docs.zephir-lang.com/en/latest/license */ #ifndef ZEPHIR_KERNEL_GLOBALS_H #define ZEPHIR_KERNEL_GLOBALS_H #include #define ZEPHIR_MAX_CACHE_SLOTS 512 typedef struct _zephir_function_cache { zend_class_entry *ce; zend_function *func; } zephir_function_cache; typedef zend_function zephir_fcall_cache_entry; #define ZEPHIR_INIT_FUNCS(class_functions) static const zend_function_entry class_functions[] = /** Define FASTCALL */ #if defined(__GNUC__) && ZEND_GCC_VERSION >= 3004 && defined(__i386__) # define ZEPHIR_FASTCALL __attribute__((fastcall)) #elif defined(_MSC_VER) && defined(_M_IX86) # define ZEPHIR_FASTCALL __fastcall #else # define ZEPHIR_FASTCALL #endif #define ZEPHIR_INIT_CLASS(name) \ int zephir_ ##name## _init(INIT_FUNC_ARGS) #define ZEPHIR_INIT(name) \ if (zephir_ ##name## _init(INIT_FUNC_ARGS_PASSTHRU) == FAILURE) { \ return FAILURE; \ } #if defined(__GNUC__) && (defined(__clang__) || ((__GNUC__ * 100 + __GNUC_MINOR__) >= 405)) # define UNREACHABLE() __builtin_unreachable() # define ASSUME(x) if (x) {} else __builtin_unreachable() #else # define UNREACHABLE() assert(0) # define ASSUME(x) assert(!!(x)); #endif #if defined(__GNUC__) || defined(__clang__) # define ZEPHIR_ATTR_NONNULL __attribute__((nonnull)) # define ZEPHIR_ATTR_NONNULL1(x) __attribute__((nonnull (x))) # define ZEPHIR_ATTR_NONNULL2(x, y) __attribute__((nonnull (x, y))) # define ZEPHIR_ATTR_NONNULL3(x, y, z) __attribute__((nonnull (x, y, z))) # define ZEPHIR_ATTR_PURE __attribute__((pure)) # define ZEPHIR_ATTR_CONST __attribute__((const)) # define ZEPHIR_ATTR_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) #else # define ZEPHIR_ATTR_NONNULL # define ZEPHIR_ATTR_NONNULL1(x) # define ZEPHIR_ATTR_NONNULL2(x, y) # define ZEPHIR_ATTR_NONNULL3(x, y, z) # define ZEPHIR_ATTR_PURE # define ZEPHIR_ATTR_CONST # define ZEPHIR_ATTR_WARN_UNUSED_RESULT #endif #if !defined(__GNUC__) && !(defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) # define __builtin_constant_p(s) (0) #endif #ifndef __func__ # define __func__ __FUNCTION__ #endif #if defined(__GNUC__) # define ZEPHIR_NO_OPT __attribute__((optimize("O0"))) #else # define ZEPHIR_NO_OPT #endif #define likely(x) EXPECTED(x) #define unlikely(x) UNEXPECTED(x) #ifndef ZEND_ACC_DTOR #define ZEND_ACC_DTOR 0 #endif #endif