97 lines
3.4 KiB
C
97 lines
3.4 KiB
C
|
|
/*
|
|
+------------------------------------------------------------------------+
|
|
| Zephir Language |
|
|
+------------------------------------------------------------------------+
|
|
| Copyright (c) 2011-2017 Phalcon Team (http://www.zephir-lang.com) |
|
|
+------------------------------------------------------------------------+
|
|
| This source file is subject to the New BSD License that is bundled |
|
|
| with this package in the file docs/LICENSE.txt. |
|
|
| |
|
|
| If you did not receive a copy of the license and are unable to |
|
|
| obtain it through the world-wide-web, please send an email |
|
|
| to license@zephir-lang.com so we can send you a copy immediately. |
|
|
+------------------------------------------------------------------------+
|
|
| Authors: Andres Gutierrez <andres@zephir-lang.com> |
|
|
| Eduar Carvajal <eduar@zephir-lang.com> |
|
|
| Vladimir Kolesnikov <vladimir@extrememember.com> |
|
|
+------------------------------------------------------------------------+
|
|
*/
|
|
|
|
#ifndef ZEPHIR_KERNEL_GLOBALS_H
|
|
#define ZEPHIR_KERNEL_GLOBALS_H
|
|
|
|
#include <php.h>
|
|
|
|
#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)
|
|
|
|
#endif
|