Index: /trunk/processor/hashtable.m4
===================================================================
--- /trunk/processor/hashtable.m4	(revision 534)
+++ /trunk/processor/hashtable.m4	(revision 721)
@@ -65,5 +65,4 @@
 
 			efree(buf);
-			return; /* no check size */
 		', `
 		dnl }}}
Index: /trunk/processor/processor.m4
===================================================================
--- /trunk/processor/processor.m4	(revision 716)
+++ /trunk/processor/processor.m4	(revision 721)
@@ -85,5 +85,4 @@
 #endif
 	} while(0);
-	return;
 	', `
 		dnl IFDASM else
@@ -323,4 +322,8 @@
 #endif
 
+#ifdef ZEND_ENGINE_2
+	STRUCT(HashTable, properties_info, HashTable_zend_property_info)
+#endif
+
 #ifdef ZEND_ENGINE_2_4
 	DISPATCH(int, default_properties_count)
@@ -334,13 +337,10 @@
 	DONE(builtin_functions)
 	STRUCT(HashTable, default_properties, HashTable_zval_ptr)
-#	ifdef ZEND_ENGINE_2
-	STRUCT(HashTable, properties_info, HashTable_zend_property_info)
-#		ifdef ZEND_ENGINE_2_1
+#	ifdef ZEND_ENGINE_2_1
 	STRUCT(HashTable, default_static_members, HashTable_zval_ptr)
 	IFCOPY(`dst->static_members = &dst->default_static_members;')
 	DONE(static_members)
-#		else
+#	elif defined(ZEND_ENGINE_2)
 	STRUCT_P(HashTable, static_members, HashTable_zval_ptr)
-#		endif
 #	endif
 #endif /* ZEND_ENGINE_2_4 */
@@ -486,12 +486,19 @@
 undefine(`UNION_znode_op')
 define(`UNION_znode_op', `dnl {{{
-	assert(src->$1_type == IS_CONST ||
-		src->$1_type == IS_VAR ||
-		src->$1_type == IS_CV ||
-		src->$1_type == IS_TMP_VAR ||
-		src->$1_type == IS_UNUSED);
+	switch ((src->$1_type & ~EXT_TYPE_UNUSED)) {
+	case IS_CONST:
+	case IS_VAR:
+	case IS_CV:
+	case IS_TMP_VAR:
+	case IS_UNUSED:
+		break;
+
+	default:
+		assert(0);
+	}
+
 	dnl dirty dispatch
 	DISABLECHECK(`
-	switch (src->$1_type) {
+	switch ((src->$1_type & ~EXT_TYPE_UNUSED)) {
 		case IS_CONST:
 			dnl TODO: fix me, use literals
@@ -659,8 +666,10 @@
 #endif
 		IFRESTORE(`dst->filename = processor->entry_src->filepath;')
+#ifndef ZEND_ENGINE_2_4
 		if (op_array_info->oplineinfo_cnt) {
 			gc_opcodes = 1;
 			COPY_N_EX(last, zend_op, opcodes)
 		}
+#endif
 		if (gc_arg_info || gc_opcodes) {
 			xc_gc_op_array_t gc_op_array;
@@ -889,6 +898,11 @@
 #endif
 DEF_STRUCT_P_FUNC(`xc_op_array_info_t', , `dnl {{{
+#ifdef ZEND_ENGINE_2_4
+	DISPATCH(zend_uint, literalinfo_cnt)
+	DISPATCH_ARRAY(literalinfo_cnt, int, literalinfos)
+#else
 	DISPATCH(zend_uint, oplineinfo_cnt)
 	DISPATCH_ARRAY(oplineinfo_cnt, int, oplineinfos)
+#endif
 ')
 dnl }}}
Index: /trunk/xcache.c
===================================================================
--- /trunk/xcache.c	(revision 716)
+++ /trunk/xcache.c	(revision 721)
@@ -1177,8 +1177,11 @@
 
 /* {{{ Constant Usage */
-#define xcache_op1_is_file 1
-#define xcache_op1_is_dir  2
-#define xcache_op2_is_file 4
-#define xcache_op2_is_dir  8
+#ifdef ZEND_ENGINE_2_4
+#else
+#	define xcache_op1_is_file 1
+#	define xcache_op1_is_dir  2
+#	define xcache_op2_is_file 4
+#	define xcache_op2_is_dir  8
+#endif
 typedef struct {
 	zend_bool filepath_used;
@@ -1190,9 +1193,15 @@
 static void xc_collect_op_array_info(xc_entry_t *xce, xc_entry_data_php_t *php, xc_const_usage_t *usage, xc_op_array_info_t *op_array_info, zend_op_array *op_array TSRMLS_DC) /* {{{ */
 {
+#ifdef ZEND_ENGINE_2_4
 	int oplineno;
+#else
+	int oplineno;
+#endif
 	xc_vector_t vector_int;
 
 	xc_vector_init(int, &vector_int);
 
+#ifdef ZEND_ENGINE_2_4
+#else
 #define XCACHE_CHECK_OP(type, op) \
 	if (zend_binary_strcmp(Z_STRVAL(Z_OP_CONSTANT(opline->op)), Z_STRLEN(Z_OP_CONSTANT(opline->op)), xce->type##path, xce->type##path_len) == 0) { \
@@ -1244,4 +1253,5 @@
 	op_array_info->oplineinfo_cnt = vector_int.cnt;
 	op_array_info->oplineinfos    = xc_vector_detach(int, &vector_int);
+#endif
 	xc_vector_free(int, &vector_int);
 }
@@ -1249,9 +1259,11 @@
 void xc_fix_op_array_info(const xc_entry_t *xce, const xc_entry_data_php_t *php, zend_op_array *op_array, int copy, const xc_op_array_info_t *op_array_info TSRMLS_DC) /* {{{ */
 {
+#ifdef ZEND_ENGINE_2_4
+#else
 	int i;
-	if (!op_array_info->oplineinfo_cnt) {
-		return;
-	}
-
+#endif
+
+#ifdef ZEND_ENGINE_2_4
+#else
 	for (i = 0; i < op_array_info->oplineinfo_cnt; i += 2) {
 		int oplineno = op_array_info->oplineinfos[i];
@@ -1340,11 +1352,18 @@
 		}
 	}
+#endif
 }
 /* }}} */
 static void xc_free_op_array_info(xc_op_array_info_t *op_array_info TSRMLS_DC) /* {{{ */
 {
+#ifdef ZEND_ENGINE_2_4
+	if (op_array_info->literalinfos) {
+		efree(op_array_info->literalinfos);
+	}
+#else
 	if (op_array_info->oplineinfos) {
 		efree(op_array_info->oplineinfos);
 	}
+#endif
 }
 /* }}} */
Index: /trunk/xcache.h
===================================================================
--- /trunk/xcache.h	(revision 716)
+++ /trunk/xcache.h	(revision 721)
@@ -259,6 +259,11 @@
 /* {{{ xc_op_array_info_t */
 typedef struct {
+#ifdef ZEND_ENGINE_2_4
+	zend_uint literalinfo_cnt;
+	int *literalinfos;
+#else
 	zend_uint oplineinfo_cnt;
 	int *oplineinfos;
+#endif
 } xc_op_array_info_t;
 /* }}} */
