summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSara Golemon <pollita@php.net>2004-07-29 17:45:31 +0000
committerSara Golemon <pollita@php.net>2004-07-29 17:45:31 +0000
commitd96e7a170ce77daea8bb1fd69658b57a28e301e3 (patch)
treeb8ae5c050806e0582027fcde09ccb15b488288f2
parent37acb31c1a6260cd15b4d7af0ee56d726f2ca26a (diff)
downloadphp-git-d96e7a170ce77daea8bb1fd69658b57a28e301e3.tar.gz
Revert goto opcode
-rw-r--r--Zend/zend_compile.c36
-rw-r--r--Zend/zend_compile.h4
-rw-r--r--Zend/zend_execute.c27
-rw-r--r--Zend/zend_language_parser.y3
-rw-r--r--Zend/zend_language_scanner.l4
-rw-r--r--Zend/zend_opcode.c6
6 files changed, 0 insertions, 80 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 623d78f869..809c2b4765 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -3497,42 +3497,6 @@ void zend_do_exit(znode *result, znode *message TSRMLS_DC)
result->u.constant.value.lval = 1;
}
-void zend_do_label(znode *label TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_NOP;
- SET_UNUSED(opline->result);
- SET_UNUSED(opline->op1);
- SET_UNUSED(opline->op2);
-
- if (label->op_type == IS_CONST &&
- label->u.constant.type == IS_STRING) {
- if (!CG(active_op_array)->labels) {
- CG(active_op_array)->labels = emalloc(sizeof(HashTable));
- zend_hash_init(CG(active_op_array)->labels, 16, NULL, NULL, 0);
- }
- if (zend_hash_exists(CG(active_op_array)->labels, label->u.constant.value.str.val, label->u.constant.value.str.len + 1)) {
- zend_error(E_COMPILE_ERROR, "Label cannot be redefined.");
- } else {
- /* Point to our newly created NOP instruction */
- zend_hash_add(CG(active_op_array)->labels, label->u.constant.value.str.val, label->u.constant.value.str.len + 1, &opline, sizeof(zend_op*), NULL);
- }
- zval_dtor(&label->u.constant);
- } else {
- zend_error(E_COMPILE_ERROR, "Invalid label identifier, expecting T_STRING");
- }
-}
-void zend_do_goto(znode *label TSRMLS_DC)
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_GOTO;
- SET_UNUSED(opline->result);
- opline->op1 = *label;
- SET_UNUSED(opline->op2);
-}
-
void zend_do_begin_silence(znode *strudel_token TSRMLS_DC)
{
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h
index a4ba04d109..69fc099b70 100644
--- a/Zend/zend_compile.h
+++ b/Zend/zend_compile.h
@@ -170,7 +170,6 @@ struct _zend_op_array {
zend_uint *refcount;
zend_op *opcodes;
- HashTable *labels;
zend_uint last, size;
zend_uint T;
@@ -460,8 +459,6 @@ void zend_do_declare_end(znode *declare_token TSRMLS_DC);
void zend_do_end_heredoc(TSRMLS_D);
void zend_do_exit(znode *result, znode *message TSRMLS_DC);
-void zend_do_goto(znode *label TSRMLS_DC);
-void zend_do_label(znode *label TSRMLS_DC);
void zend_do_begin_silence(znode *strudel_token TSRMLS_DC);
void zend_do_end_silence(znode *strudel_token TSRMLS_DC);
@@ -717,7 +714,6 @@ int zendlex(znode *zendlval TSRMLS_DC);
#define ZEND_HANDLE_EXCEPTION 149
-#define ZEND_GOTO 150
/* end of block */
/* END: OPCODES */
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index 0e0c7484c3..093cd0812e 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -4064,32 +4064,6 @@ int zend_isset_isempty_prop_obj_handler(ZEND_OPCODE_HANDLER_ARGS)
return zend_isset_isempty_dim_prop_obj_handler(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
}
-int zend_goto_handler(ZEND_OPCODE_HANDLER_ARGS)
-{
- zend_op **target;
- zval *label = get_zval_ptr(&opline->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
- zval tmp;
-
- tmp = *label;
- zval_copy_ctor(&tmp);
- convert_to_string(&tmp);
- label = &tmp;
-
- if (op_array->labels &&
- zend_hash_find(op_array->labels, label->value.str.val, label->value.str.len + 1, (void **)&target) == SUCCESS) {
-#if DEBUG_ZEND>=2
- printf("Jumping on goto to opcode %08X\n", *target);
-#endif
- zval_dtor(&tmp);
- SET_OPCODE(*target);
- return 0;
- }
-
- zend_error(E_ERROR, "Unknown label %s", Z_STRVAL_P(label));
- zval_dtor(&tmp);
- NEXT_OPCODE();
-}
-
int zend_exit_handler(ZEND_OPCODE_HANDLER_ARGS)
{
if (opline->op1.op_type != IS_UNUSED) {
@@ -4464,7 +4438,6 @@ void zend_init_opcodes_handlers()
zend_opcode_handlers[ZEND_HANDLE_EXCEPTION] = zend_handle_exception_handler;
- zend_opcode_handlers[ZEND_GOTO] = zend_goto_handler;
}
/*
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
index cdaffd0fa6..257849fd26 100644
--- a/Zend/zend_language_parser.y
+++ b/Zend/zend_language_parser.y
@@ -145,7 +145,6 @@
%token T_NULL
%token T_FALSE
%token T_TRUE
-%token T_GOTO
%% /* Rules */
@@ -224,8 +223,6 @@ unticked_statement:
'{' inner_statement_list '}' { zend_do_end_catch(&$1 TSRMLS_CC); }
additional_catches { zend_do_mark_last_catch(&$7, &$18 TSRMLS_CC); }
| T_THROW expr ';' { zend_do_throw(&$2 TSRMLS_CC); }
- | T_GOTO expr ';' { zend_do_goto(&$2 TSRMLS_CC); }
- | T_STRING ':' { zend_do_label(&$1 TSRMLS_CC); }
;
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index 3f4026efd0..00deccd731 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -762,10 +762,6 @@ NEWLINE ("\r"|"\n"|"\r\n")
%option noyywrap
%%
-<ST_IN_SCRIPTING>"goto" {
- return T_GOTO;
-}
-
<ST_IN_SCRIPTING>"exit" {
return T_EXIT;
}
diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c
index cdce1a10cd..e5c8faba95 100644
--- a/Zend/zend_opcode.c
+++ b/Zend/zend_opcode.c
@@ -63,7 +63,6 @@ void init_op_array(zend_op_array *op_array, zend_uchar type, int initial_ops_siz
op_array->size = initial_ops_size;
op_array->last = 0;
op_array->opcodes = NULL;
- op_array->labels = NULL;
op_array_alloc_ops(op_array);
op_array->T = 0;
@@ -225,11 +224,6 @@ ZEND_API void destroy_op_array(zend_op_array *op_array TSRMLS_DC)
}
efree(op_array->opcodes);
- if (op_array->labels) {
- zend_hash_destroy(op_array->labels);
- efree(op_array->labels);
- }
-
if (op_array->function_name) {
efree(op_array->function_name);
}