cvs: ZendEngine2 / ZEND_CHANGES zend_compile.c zend_compile.h zend_execute.c zend_language_parser.y zend_language_scanner.l
| From: | Andi Gutmans | Date: | Sun, 14 Jul 2002 19:23:18 +0000 |
| Subject: | cvs: ZendEngine2 / ZEND_CHANGES zend_compile.c zend_compile.h zend_execute.c zend_language_parser.y zend_language_scanner.l | ||
| Groups: | php.zend-engine.cvs | ||
| Request: | Send a blank email to php-zend-engine-cvs+get-252@lists.php.net to get a copy of this message | ||
andi Sun Jul 14 15:23:18 2002 EDT
Modified files:
/ZendEngine2 ZEND_CHANGES zend_compile.c zend_compile.h
zend_execute.c zend_language_parser.y
zend_language_scanner.l
Log:
- Nuke delete(). It was a big mistake to introduce it and I finally
- understand why Java didn't do so.
- If you still want to control destruction of your object then either make
- sure you kill all references or create a destruction method which you
- call yourself.
Index: ZendEngine2/ZEND_CHANGES
diff -u ZendEngine2/ZEND_CHANGES:1.29 ZendEngine2/ZEND_CHANGES:1.30
--- ZendEngine2/ZEND_CHANGES:1.29 Sun Jun 30 15:55:50 2002
+++ ZendEngine2/ZEND_CHANGES Sun Jul 14 15:23:17 2002
@@ -121,19 +121,6 @@
print $obj->address . "\n";
?>
- * Forced deletion of objects.
-
- The Zend Engine 1.0 had no means to force deletion of an object
- if there are still references to it. The newly introduced delete
- statement calls the object's destructor and frees it even if the
- object is referenced by some other places in the engine. Other
- references to the deleted object become stale and trying to
- access them results in a fatal error.
-
- Note that if you have a user-defined function delete() in an old
- script, this script will yield a parser error with the Zend
- Engine 2.0, since 'delete' is now a reserved word.
-
* Nested classes (namespaces).
The Zend Engine 1.0 provided only three scopes: the global
Index: ZendEngine2/zend_compile.c
diff -u ZendEngine2/zend_compile.c:1.291 ZendEngine2/zend_compile.c:1.292
--- ZendEngine2/zend_compile.c:1.291 Mon Jul 1 11:13:39 2002
+++ ZendEngine2/zend_compile.c Sun Jul 14 15:23:18 2002
@@ -2625,7 +2625,7 @@
}
-void zend_do_unset(znode *variable, int type TSRMLS_DC)
+void zend_do_unset(znode *variable TSRMLS_DC)
{
zend_op *last_op;
@@ -2643,7 +2643,6 @@
break;
}
- last_op->extended_value = type;
}
Index: ZendEngine2/zend_compile.h
diff -u ZendEngine2/zend_compile.h:1.176 ZendEngine2/zend_compile.h:1.177
--- ZendEngine2/zend_compile.h:1.176 Tue May 7 14:42:13 2002
+++ ZendEngine2/zend_compile.h Sun Jul 14 15:23:18 2002
@@ -354,7 +354,7 @@
void zend_do_cast(znode *result, znode *expr, int type TSRMLS_DC);
void zend_do_include_or_eval(int type, znode *result, znode *op1 TSRMLS_DC);
-void zend_do_unset(znode *variable, int type TSRMLS_DC);
+void zend_do_unset(znode *variable TSRMLS_DC);
void zend_do_isset_or_isempty(int type, znode *result, znode *variable TSRMLS_DC);
void zend_do_foreach_begin(znode *foreach_token, znode *array, znode *open_brackets_token, znode
*as_token, int variable TSRMLS_DC);
@@ -623,7 +623,6 @@
/* unset types */
#define ZEND_UNSET_REG 0
-#define ZEND_UNSET_OBJ 1
/* var status for backpatching */
#define BP_VAR_R 0
Index: ZendEngine2/zend_execute.c
diff -u ZendEngine2/zend_execute.c:1.352 ZendEngine2/zend_execute.c:1.353
--- ZendEngine2/zend_execute.c:1.352 Sun Jul 14 14:17:07 2002
+++ ZendEngine2/zend_execute.c Sun Jul 14 15:23:18 2002
@@ -2755,11 +2755,7 @@
case ZEND_UNSET_VAR:
{
zval tmp, *variable = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1),
BP_VAR_R);
- zval **object;
- zend_bool unset_object;
-
- unset_object = (EX(opline)->extended_value == ZEND_UNSET_OBJ);
if (variable->type != IS_STRING) {
tmp = *variable;
zval_copy_ctor(&tmp);
@@ -2767,16 +2763,6 @@
variable = &tmp;
}
- if (unset_object) {
- if (zend_hash_find(EG(active_symbol_table), variable->value.str.val,
variable->value.str.len+1, (void **)&object) == FAILURE) {
- zend_error(E_ERROR, "Cannot delete non-existing object");
- }
- if (Z_TYPE_PP(object) != IS_OBJECT) {
- zend_error(E_ERROR, "Cannot call delete on non-object type");
- }
- Z_OBJ_HT_PP(object)->delete_obj(*object TSRMLS_CC);
- }
-
zend_hash_del(EG(active_symbol_table), variable->value.str.val,
variable->value.str.len+1);
if (variable == &tmp) {
@@ -2788,10 +2774,6 @@
case ZEND_UNSET_DIM_OBJ: {
zval **container = get_zval_ptr_ptr(&EX(opline)->op1, EX(Ts), BP_VAR_R);
zval *offset = get_zval_ptr(&EX(opline)->op2, EX(Ts), &EG(free_op2), BP_VAR_R);
- zend_bool unset_object;
- zval **object;
-
- unset_object = (EX(opline)->extended_value == ZEND_UNSET_OBJ);
if (container) {
HashTable *ht;
@@ -2818,44 +2800,14 @@
} else {
index = offset->value.lval;
}
-
- if (unset_object) {
- if (zend_hash_index_find(ht, index, (void **)&object) == FAILURE) {
- zend_error(E_ERROR, "Cannot delete non-existing object");
- }
- if (Z_TYPE_PP(object) != IS_OBJECT) {
- zend_error(E_ERROR, "Cannot call delete on non-object type");
- }
- Z_OBJ_HT_PP(object)->delete_obj(*object TSRMLS_CC);
- }
zend_hash_index_del(ht, index);
break;
}
case IS_STRING:
- if (unset_object) {
- if (zend_hash_find(ht, offset->value.str.val, offset->value.str.len+1, (void
**)&object) == FAILURE) {
- zend_error(E_ERROR, "Cannot delete non-existing object");
- }
- if (Z_TYPE_PP(object) != IS_OBJECT) {
- zend_error(E_ERROR, "Cannot call delete on non-object type");
- }
- Z_OBJ_HT_PP(object)->delete_obj(*object TSRMLS_CC);
- }
-
zend_hash_del(ht, offset->value.str.val, offset->value.str.len+1);
break;
case IS_NULL:
- if (unset_object) {
- if (zend_hash_find(ht, "", sizeof(""), (void **)&object) ==
FAILURE) {
- zend_error(E_ERROR, "Cannot delete non-existing object");
- }
- if (Z_TYPE_PP(object) != IS_OBJECT) {
- zend_error(E_ERROR, "Cannot call delete on non-object type");
- }
- Z_OBJ_HT_PP(object)->delete_obj(*object TSRMLS_CC);
- }
-
zend_hash_del(ht, "", sizeof(""));
break;
default:
Index: ZendEngine2/zend_language_parser.y
diff -u ZendEngine2/zend_language_parser.y:1.61 ZendEngine2/zend_language_parser.y:1.62
--- ZendEngine2/zend_language_parser.y:1.61 Sun Jul 7 04:22:23 2002
+++ ZendEngine2/zend_language_parser.y Sun Jul 14 15:23:18 2002
@@ -67,7 +67,7 @@
%left '*' '/' '%'
%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 '@'
%right '['
-%nonassoc T_NEW T_DELETE
+%nonassoc T_NEW
%token T_EXIT
%token T_IF
%left T_ELSEIF
@@ -211,7 +211,6 @@
T_CATCH '(' catch_or_import_class_entry T_VARIABLE ')' {
zend_do_begin_catch(&$1, &$8, &$9, 1 TSRMLS_CC); } '{' inner_statement_list
'}' { zend_do_end_catch(&$1 TSRMLS_CC); }
additional_catches
| T_THROW expr ';' { zend_do_throw(&$2 TSRMLS_CC); }
- | T_DELETE variable ';' { zend_do_end_variable_parse(BP_VAR_UNSET, 0 TSRMLS_CC);
zend_do_unset(&$2, ZEND_UNSET_OBJ TSRMLS_CC); }
| T_IMPORT { zend_do_begin_import(TSRMLS_C); } import_rule T_FROM catch_or_import_class_entry {
zend_do_end_import(&$5 TSRMLS_CC); } ';'
;
@@ -252,7 +251,7 @@
;
unset_variable:
- variable { zend_do_end_variable_parse(BP_VAR_UNSET, 0 TSRMLS_CC); zend_do_unset(&$1,
ZEND_UNSET_REG TSRMLS_CC); }
+ variable { zend_do_end_variable_parse(BP_VAR_UNSET, 0 TSRMLS_CC); zend_do_unset(&$1
TSRMLS_CC); }
;
use_filename:
Index: ZendEngine2/zend_language_scanner.l
diff -u ZendEngine2/zend_language_scanner.l:1.51 ZendEngine2/zend_language_scanner.l:1.52
--- ZendEngine2/zend_language_scanner.l:1.51 Wed Apr 10 17:33:34 2002
+++ ZendEngine2/zend_language_scanner.l Sun Jul 14 15:23:18 2002
@@ -625,10 +625,6 @@
return T_NEW;
}
-<ST_IN_SCRIPTING>"delete" {
- return T_DELETE;
-}
-
<ST_IN_SCRIPTING>"var" {
return T_VAR;
}