Skip to content

Instantly share code, notes, and snippets.

diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 90d36b1..4a54c56 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -2799,6 +2799,36 @@ static int zend_do_convert_type_check(zend_op *init_opline, znode *result, zend_
}
/* }}} */
+static int zend_do_convert_defined(zend_op *init_opline, znode *result TSRMLS_DC) /* {{{ */
+{
diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c
index 025e8fa..fa86472 100644
--- a/Zend/zend_opcode.c
+++ b/Zend/zend_opcode.c
@@ -655,7 +655,7 @@ static void zend_resolve_finally_calls(zend_op_array *op_array TSRMLS_DC)
ZEND_API int pass_two(zend_op_array *op_array TSRMLS_DC)
{
- zend_op *opline, *end;
+ zend_op *opline, *end, *fast_call = NULL;
diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h
index 2a3d58e..e6e30f3 100644
--- a/Zend/zend_compile.h
+++ b/Zend/zend_compile.h
@@ -843,6 +843,9 @@ int zend_add_literal(zend_op_array *op_array, const zval *zv TSRMLS_DC);
#define ZEND_FAST_RET_TO_CATCH 1
#define ZEND_FAST_RET_TO_FINALLY 2
+#define ZEND_FAST_CALL_FOR_CATCH 1
+#define ZEND_FAST_CALL_FOR_FINALLY 2
@laruence
laruence / gist:efb1a3f3094cc82a85ab
Last active August 29, 2015 14:05
name could be freed in add_literal
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 5b35233..dbba222 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -429,8 +429,8 @@ static int zend_add_class_name_literal(zend_op_array *op_array, zend_string *nam
ret = zend_add_literal(op_array, &zv TSRMLS_CC);
- lc_name = STR_ALLOC(name->len, 0);
- zend_str_tolower_copy(lc_name->val, name->val, name->len);
diff --git a/Zend/zend_extensions.c b/Zend/zend_extensions.c
index 4728434..7e63f19 100644
--- a/Zend/zend_extensions.c
+++ b/Zend/zend_extensions.c
@@ -105,6 +105,14 @@ int zend_load_extension(const char *path TSRMLS_DC)
#endif
DL_UNLOAD(handle);
return FAILURE;
+ } else if (zend_get_extension(new_extension->name)) {
+ fprintf(stderr, "Cannot load %s - it was already loade\n", new_extension->name);
@laruence
laruence / gist:84d7c99974d9e905f65a
Created October 21, 2014 07:20
fetch_dimension_address
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 5d3ee24..a8bfdb1 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -2281,8 +2281,6 @@ void zend_compile_assign(znode *result, zend_ast *ast TSRMLS_DC) /* {{{ */
opline->opcode = ZEND_ASSIGN_DIM;
opline = zend_emit_op_data(&expr_node TSRMLS_CC);
- opline->op2.var = get_temporary_variable(CG(active_op_array));
- opline->op2_type = IS_VAR;
@laruence
laruence / gist:a368a47cbe7b21b96534
Created October 23, 2014 09:46
concat_function
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c
index 03e913c..df918e4 100644
--- a/Zend/zend_operators.c
+++ b/Zend/zend_operators.c
@@ -1525,36 +1525,40 @@ ZEND_API int add_string_to_string(zval *result, const zval *op1, const zval *op2
ZEND_API int concat_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{{ */
{
- zval op1_copy, op2_copy;
+ zend_string *op1_str, *op2_str;
@laruence
laruence / gist:703f1db88d1e3714dfaa
Created December 23, 2014 08:34
packed array insert
diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h
index 5bdfa70..1a3224c 100644
--- a/Zend/zend_hash.h
+++ b/Zend/zend_hash.h
@@ -769,6 +769,26 @@ static zend_always_inline void *zend_hash_get_current_data_ptr_ex(HashTable *ht,
#define ZEND_HASH_FOREACH_CURRENT_VAL(ht, _val) \
_val = _z;
+#define ZEND_HASH_PACKED_PUSH_START(ht) do { \
+ uint32_t __idx = 0; \
@laruence
laruence / gist:e7e32874391aee6467af
Created December 30, 2014 10:37
use zend_array instead of HashTable
diff --git a/Zend/zend.c b/Zend/zend.c
index 942b0a0..14af9d4 100644
--- a/Zend/zend.c
+++ b/Zend/zend.c
@@ -551,7 +551,7 @@ static zend_bool php_auto_globals_create_globals(zend_string *name) /* {{{ */
ZVAL_ARR(&globals, &EG(symbol_table));
ZVAL_NEW_REF(&globals, &globals);
- zend_hash_update(&EG(symbol_table).ht, name, &globals);
+ zend_hash_update(&EG(symbol_table), name, &globals);
$ cat ext/standard/tests/array/array_multisort_variation7.log
---- EXPECTED OUTPUT
*** Testing array_multisort() : usage variation - test sort order of all types***
bool(true)
array(10) {
["empty string DQ"]=>
string(0) ""
["int 0"]=>
int(0)