text: 
  /*
    +------------------------------------------------------------------------+
    | Zephir Language                                                        |
    +------------------------------------------------------------------------+
    | Copyright (c) 2011-2013 Zephir 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
  
  #define ZEPHIR_MAX_MEMORY_STACK 48
  
  /** Memory frame */
  typedef struct _zephir_memory_entry {
  	size_t pointer;
  	size_t capacity;
  	zval ***addresses;
  	size_t hash_pointer;
  	size_t hash_capacity;
  	zval ***hash_addresses;
  	struct _zephir_memory_entry *prev;
  	struct _zephir_memory_entry *next;
  #ifndef ZEPHIR_RELEASE
  	const char *func;
  #endif
  } zephir_memory_entry;
  
  /** Virtual Symbol Table */
  typedef struct _zephir_symbol_table {
  	struct _zephir_memory_entry *scope;
  	HashTable *symbol_table;
  	struct _zephir_symbol_table *prev;
  } zephir_symbol_table;
  
  typedef struct _zephir_function_cache {
  	zend_class_entry *ce;
  	zend_function *func;
  } zephir_function_cache;
  
  #if PHP_VERSION_ID >= 50400
  	#define ZEPHIR_INIT_FUNCS(class_functions) static const zend_function_entry class_functions[] =
  #else
  	#define ZEPHIR_INIT_FUNCS(class_functions) static const function_entry class_functions[] =
  #endif
  
  #ifndef PHP_FE_END
  	#define PHP_FE_END { NULL, NULL, NULL, 0, 0 }
  #endif
  
  /** 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; \
  	}
  
  /** Macros for branch prediction */
  #ifndef likely
  #if defined(__GNUC__) && ZEND_GCC_VERSION >= 3004 && defined(__i386__)
  #define likely(x)       __builtin_expect((x), 1)
  #define unlikely(x)     __builtin_expect((x), 0)
  #else
  #define likely(x)       EXPECTED(x)
  #define unlikely(x)     UNEXPECTED(x)
  #endif
  
  #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
  #endif
  
  #endif
  