--- php-5.3.1/Zend/zend_vm_def.h	2009-11-02 19:11:33.000000000 +0100
+++ active-3.1/Zend/zend_vm_def.h	2009-12-03 08:33:28.000000000 +0100
@@ -64,6 +64,19 @@
 	ZEND_VM_NEXT_OPCODE();
 }
 
+ZEND_VM_HANDLER(120, ZEND_DII, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
+{
+    zend_op *opline = EX(opline);
+    zend_free_op free_op1, free_op2;
+
+    dii_function(&EX_T(opline->result.u.var).tmp_var,
+        GET_OP1_ZVAL_PTR(BP_VAR_R),
+        GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC);
+    FREE_OP1();
+    FREE_OP2();
+    ZEND_VM_NEXT_OPCODE();
+}
+
 ZEND_VM_HANDLER(4, ZEND_DIV, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
 {
 	zend_op *opline = EX(opline);
@@ -506,6 +519,11 @@
 	ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_helper, binary_op, div_function);
 }
 
+ZEND_VM_HANDLER(121, ZEND_ASSIGN_DII, VAR|UNUSED|CV, CONST|TMP|VAR|UNUSED|CV)
+{
+	ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_helper, binary_op, dii_function);
+}
+
 ZEND_VM_HANDLER(27, ZEND_ASSIGN_MOD, VAR|UNUSED|CV, CONST|TMP|VAR|UNUSED|CV)
 {
 	ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_helper, binary_op, mod_function);
@@ -3885,11 +3903,7 @@
 
 	switch (opline->extended_value & ZEND_ISSET_ISEMPTY_MASK) {
 		case ZEND_ISSET:
-			if (isset && Z_TYPE_PP(value) == IS_NULL) {
-				Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0;
-			} else {
-				Z_LVAL(EX_T(opline->result.u.var).tmp_var) = isset;
-			}
+			Z_LVAL(EX_T(opline->result.u.var).tmp_var) = isset;
 			break;
 		case ZEND_ISEMPTY:
 			if (!isset || !i_zend_is_true(*value)) {
@@ -3952,11 +3966,7 @@
 
 			switch (opline->extended_value) {
 				case ZEND_ISSET:
-					if (isset && Z_TYPE_PP(value) == IS_NULL) {
-						result = 0;
-					} else {
-						result = isset;
-					}
+					result = isset;
 					break;
 				case ZEND_ISEMPTY:
 					if (!isset || !i_zend_is_true(*value)) {
--- php-5.3.1/Zend/zend_operators.c	2009-06-04 20:20:45.000000000 +0200
+++ active-3.1/Zend/zend_operators.c	2009-12-11 02:21:50.000000000 +0100
@@ -962,6 +962,67 @@
 }
 /* }}} */
 
+ZEND_API int dii_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{{ */
+{
+	zval op1_copy, op2_copy;
+	int converted = 0;
+
+	while (1) {
+		switch (TYPE_PAIR(Z_TYPE_P(op1), Z_TYPE_P(op2))) {
+			case TYPE_PAIR(IS_LONG, IS_LONG):
+				if (Z_LVAL_P(op2) == 0) {
+					zend_error(E_WARNING, "Division by zero");
+					ZVAL_BOOL(result, 0);
+					return FAILURE;         /* division by zero */
+				} else if (Z_LVAL_P(op2) == -1 && Z_LVAL_P(op1) == LONG_MIN) {
+					/* Prevent overflow error/crash */
+					ZVAL_DOUBLE(result, (double) LONG_MIN / -1);
+					return SUCCESS;
+				}
+				ZVAL_LONG(result, Z_LVAL_P(op1) / Z_LVAL_P(op2));
+				return SUCCESS;
+
+			case TYPE_PAIR(IS_DOUBLE, IS_LONG):
+				if (Z_LVAL_P(op2) == 0) {
+					zend_error(E_WARNING, "Division by zero");
+					ZVAL_BOOL(result, 0);
+					return FAILURE;         /* division by zero */
+				}
+				ZVAL_LONG(result, (long)Z_DVAL_P(op1) / Z_LVAL_P(op2));
+				return SUCCESS;
+
+			case TYPE_PAIR(IS_LONG, IS_DOUBLE):
+				if (Z_DVAL_P(op2) == 0) {
+					zend_error(E_WARNING, "Division by zero");
+					ZVAL_BOOL(result, 0);
+					return FAILURE;         /* division by zero */
+				}
+				ZVAL_LONG(result, Z_LVAL_P(op1) / (long)Z_DVAL_P(op2));
+				return SUCCESS;
+
+			case TYPE_PAIR(IS_DOUBLE, IS_DOUBLE):
+				if (Z_DVAL_P(op2) == 0) {
+					zend_error(E_WARNING, "Division by zero");
+					ZVAL_BOOL(result, 0);
+					return FAILURE;         /* division by zero */
+				}
+				ZVAL_LONG(result, (long)Z_DVAL_P(op1) / (long)Z_DVAL_P(op2));
+				return SUCCESS;
+
+			default:
+				if (!converted) {
+					zendi_convert_scalar_to_number(op1, op1_copy, result);
+					zendi_convert_scalar_to_number(op2, op2_copy, result);
+					converted = 1;
+				} else {
+					zend_error(E_ERROR, "Unsupported operand types");
+					return FAILURE; /* unknown datatype */
+				}
+		}
+	}
+}
+/* }}} */
+
 ZEND_API int mod_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{{ */
 {
 	zval op1_copy, op2_copy;
@@ -1268,6 +1329,10 @@
 	if (use_copy2) {
 		op2 = &op2_copy;
 	}
+php_printf("%s\n%s", Z_STRVAL_P(op1), Z_STRVAL_P(op2));
+
+zend_error(E_WARNING, Z_STRVAL_P(op1));
+zend_error(E_WARNING, Z_STRVAL_P(op2));
 
 	ZVAL_LONG(result, zend_binary_zval_strcmp(op1, op2));
 
--- php-5.3.1/Zend/zend_operators.h	2009-06-04 20:20:45.000000000 +0200
+++ active-3.1/Zend/zend_operators.h	2009-12-03 08:50:46.000000000 +0100
@@ -41,6 +41,7 @@
 ZEND_API int sub_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
 ZEND_API int mul_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
 ZEND_API int div_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
+ZEND_API int dii_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
 ZEND_API int mod_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
 ZEND_API int boolean_xor_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
 ZEND_API int boolean_not_function(zval *result, zval *op1 TSRMLS_DC);
--- php-5.3.1/Zend/zend_opcode.c	2009-06-06 01:20:59.000000000 +0200
+++ active-3.1/Zend/zend_opcode.c	2009-12-03 08:52:18.000000000 +0100
@@ -456,6 +456,10 @@
 		case ZEND_ASSIGN_DIV:
 			return (binary_op_type) div_function;
 			break;
+		case ZEND_DII:
+		case ZEND_ASSIGN_DII:
+			return (binary_op_type) dii_function;
+			break;
 		case ZEND_MOD:
 		case ZEND_ASSIGN_MOD:
 			return (binary_op_type) mod_function;
--- php-5.3.1/Zend/zend_language_scanner.l	2009-12-04 05:59:49.000000000 +0100
+++ active-3.1/Zend/zend_language_scanner.l	2009-12-03 10:07:14.000000000 +0100
@@ -332,7 +332,7 @@
 		if (type==ZEND_REQUIRE) {
 			zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, file_handle->filename TSRMLS_CC);
 			zend_bailout();
-		} else {
+		} else if(0/*CG(ignore_include_warning)*/) {
 			zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, file_handle->filename TSRMLS_CC);
 		}
 		compilation_successful=0;
@@ -837,6 +837,7 @@
 DNUM	([0-9]*"."[0-9]+)|([0-9]+"."[0-9]*)
 EXPONENT_DNUM	(({LNUM}|{DNUM})[eE][+-]?{LNUM})
 HNUM	"0x"[0-9a-fA-F]+
+BNUM    "0b"[01]+
 LABEL	[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
 WHITESPACE [ \n\r\t]+
 TABS_AND_SPACES [ \t]*
@@ -1106,8 +1107,8 @@
 	return T_GLOBAL;
 }
 
-<ST_IN_SCRIPTING>"ifset" {
-    return T_IFSET;
+<ST_IN_SCRIPTING>"isset" {
+	return T_ISSET;
 }
 
 <ST_IN_SCRIPTING>"empty" {
@@ -1206,6 +1207,14 @@
 	return T_DIV_EQUAL;
 }
 
+<ST_IN_SCRIPTING>"\\\\" {
+    return T_DII;
+}
+
+<ST_IN_SCRIPTING>"\\=" {
+	return T_DII_EQUAL;
+}
+
 <ST_IN_SCRIPTING>".=" {
 	return T_CONCAT_EQUAL;
 }
@@ -1326,6 +1335,27 @@
 	return T_LNUMBER;
 }
 
+<ST_IN_SCRIPTING>{BNUM} {
+	char *bin = yytext + 2; /* Skip "0b" */
+	int len = yyleng - 2;
+
+	/* Skip any leading 0s */
+	while (*bin == '0') {
+		bin++;
+		len--;
+	}
+
+	if (len < SIZEOF_LONG * 2) {
+		zendlval->value.lval = strtol(bin, NULL, 2);
+		zendlval->type = IS_LONG;
+		return T_LNUMBER;
+	} else {
+		zendlval->value.dval = zend_bin_strtod(bin);
+		zendlval->type = IS_DOUBLE;
+		return T_DNUMBER;
+	}
+}
+
 <ST_IN_SCRIPTING>{HNUM} {
 	char *hex = yytext + 2; /* Skip "0x" */
 	int len = yyleng - 2;
@@ -1359,7 +1389,7 @@
 	return T_NUM_STRING;
 }
 
-<ST_VAR_OFFSET>{LNUM}|{HNUM} { /* Offset must be treated as a string */
+<ST_VAR_OFFSET>{LNUM}|{HNUM}|{BNUM} { /* Offset must be treated as a string */
 	zendlval->value.str.val = (char *)estrndup(yytext, yyleng);
 	zendlval->value.str.len = yyleng;
 	zendlval->type = IS_STRING;
--- php-5.3.1/Zend/zend_language_parser.y	2009-12-04 05:58:04.000000000 +0100
+++ active-3.1/Zend/zend_language_parser.y	2009-12-03 10:08:58.000000000 +0100
@@ -55,7 +55,7 @@
 %left T_LOGICAL_XOR
 %left T_LOGICAL_AND
 %right T_PRINT
-%left '=' T_PLUS_EQUAL T_MINUS_EQUAL T_MUL_EQUAL T_DIV_EQUAL T_CONCAT_EQUAL T_MOD_EQUAL T_AND_EQUAL T_OR_EQUAL T_XOR_EQUAL T_SL_EQUAL T_SR_EQUAL
+%left '=' T_PLUS_EQUAL T_MINUS_EQUAL T_MUL_EQUAL T_DIV_EQUAL T_DII_EQUAL T_CONCAT_EQUAL T_MOD_EQUAL T_AND_EQUAL T_OR_EQUAL T_XOR_EQUAL T_SL_EQUAL T_SR_EQUAL
 %left '?' ':'
 %left T_BOOLEAN_OR
 %left T_BOOLEAN_AND
@@ -66,7 +66,7 @@
 %nonassoc '<' T_IS_SMALLER_OR_EQUAL '>' T_IS_GREATER_OR_EQUAL
 %left T_SL T_SR
 %left '+' '-' '.'
-%left '*' '/' '%'
+%left '*' '/' T_DII '%'
 %right '!'
 %nonassoc T_INSTANCEOF
 %right '~' T_INC T_DEC T_INT_CAST T_DOUBLE_CAST T_STRING_CAST T_ARRAY_CAST T_OBJECT_CAST T_BOOL_CAST T_UNSET_CAST '@'
@@ -118,7 +118,6 @@
 %token T_VAR
 %token T_UNSET
 %token T_ISSET
-%token T_IFSET
 %token T_EMPTY
 %token T_HALT_COMPILER
 %token T_CLASS
@@ -588,6 +587,7 @@
 	|	variable T_MINUS_EQUAL expr	{ zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SUB, &$$, &$1, &$3 TSRMLS_CC); }
 	|	variable T_MUL_EQUAL expr		{ zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_MUL, &$$, &$1, &$3 TSRMLS_CC); }
 	|	variable T_DIV_EQUAL expr		{ zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_DIV, &$$, &$1, &$3 TSRMLS_CC); }
+	|	variable T_DII_EQUAL expr		{ zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_DII, &$$, &$1, &$3 TSRMLS_CC); }
 	|	variable T_CONCAT_EQUAL expr	{ zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_CONCAT, &$$, &$1, &$3 TSRMLS_CC); }
 	|	variable T_MOD_EQUAL expr		{ zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_MOD, &$$, &$1, &$3 TSRMLS_CC); }
 	|	variable T_AND_EQUAL expr		{ zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_AND, &$$, &$1, &$3 TSRMLS_CC); }
@@ -612,6 +612,7 @@
 	|	expr '-' expr 	{ zend_do_binary_op(ZEND_SUB, &$$, &$1, &$3 TSRMLS_CC); }
 	|	expr '*' expr	{ zend_do_binary_op(ZEND_MUL, &$$, &$1, &$3 TSRMLS_CC); }
 	|	expr '/' expr	{ zend_do_binary_op(ZEND_DIV, &$$, &$1, &$3 TSRMLS_CC); }
+	|	expr T_DII expr  { zend_do_binary_op(ZEND_DII, &$$, &$1, &$3 TSRMLS_CC); }
 	|	expr '%' expr 	{ zend_do_binary_op(ZEND_MOD, &$$, &$1, &$3 TSRMLS_CC); }
 	| 	expr T_SL expr	{ zend_do_binary_op(ZEND_SL, &$$, &$1, &$3 TSRMLS_CC); }
 	|	expr T_SR expr	{ zend_do_binary_op(ZEND_SR, &$$, &$1, &$3 TSRMLS_CC); }
@@ -645,6 +646,7 @@
 	|	T_EXIT exit_expr	{ zend_do_exit(&$$, &$2 TSRMLS_CC); }
 	|	'@' { zend_do_begin_silence(&$1 TSRMLS_CC); } expr { zend_do_end_silence(&$1 TSRMLS_CC); $$ = $3; }
 	|	scalar				{ $$ = $1; }
+	|	'[' array_pair_list ']' { $$ = $2; }
 	|	T_ARRAY '(' array_pair_list ')' { $$ = $3; }
 	|	'`' backticks_expr '`' { zend_do_shell_exec(&$$, &$2 TSRMLS_CC); }
 	|	T_PRINT expr  { zend_do_print(&$$, &$2 TSRMLS_CC); }
--- php-5.3.1/Zend/zend_strtod.c	2009-03-18 11:18:10.000000000 +0100
+++ active-3.1/Zend/zend_strtod.c	2009-12-03 00:58:19.000000000 +0100
@@ -2638,6 +2638,24 @@
 	return value;
 }
 
+ZEND_API double zend_bin_strtod(const char *str)
+{
+	const char *s = str;
+	char c;
+	double value = 0;
+
+	if (*s == '0' && s[1] == 'b') {
+		s+= 2;
+	}
+
+	while ((c = *s++)) {
+		value = value * 2 + c - '0';
+	}
+
+	return value;
+}
+
+
 /*
  * Local variables:
  * tab-width: 4
