]> granicus.if.org Git - php/commitdiff
Revert goto opcode
authorSara Golemon <pollita@php.net>
Thu, 29 Jul 2004 17:45:31 +0000 (17:45 +0000)
committerSara Golemon <pollita@php.net>
Thu, 29 Jul 2004 17:45:31 +0000 (17:45 +0000)
Zend/zend_compile.c
Zend/zend_compile.h
Zend/zend_execute.c
Zend/zend_language_parser.y
Zend/zend_language_scanner.l
Zend/zend_opcode.c

index 623d78f869168f835215799ba9e287901d60b7b3..809c2b4765438825790b02ec33fa526098f72d2d 100644 (file)
@@ -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);
index a4ba04d109eb031b3b77cfc7ab672fa494dfa043..69fc099b708ec78e3d95dc575e67933e417557f7 100644 (file)
@@ -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 */
 
index 0e0c7484c3c1850dfd48a966822946d0bb33d30d..093cd0812e0fc74a2f5a65ee887af7b8558369f7 100644 (file)
@@ -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;
 }
 
 /*
index cdaffd0fa6e952f53605dbc290991d320dcb27f8..257849fd2642fb837016eb6d4e3318626782ca5e 100644 (file)
 %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); }
 ;
 
 
index 3f4026efd07583a77a70ec20f2700a794108f56f..00deccd7315c0ddefa3acef57d045a053887c4da 100644 (file)
@@ -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;
 }
index cdce1a10cd5013213686c24bf94ab62d5f66f745..e5c8faba959fd4b9444c3f3eece318554616907c 100644 (file)
@@ -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);
        }