diff options
author | Sara Golemon <pollita@php.net> | 2004-07-29 17:45:31 +0000 |
---|---|---|
committer | Sara Golemon <pollita@php.net> | 2004-07-29 17:45:31 +0000 |
commit | d96e7a170ce77daea8bb1fd69658b57a28e301e3 (patch) | |
tree | b8ae5c050806e0582027fcde09ccb15b488288f2 | |
parent | 37acb31c1a6260cd15b4d7af0ee56d726f2ca26a (diff) | |
download | php-git-d96e7a170ce77daea8bb1fd69658b57a28e301e3.tar.gz |
Revert goto opcode
-rw-r--r-- | Zend/zend_compile.c | 36 | ||||
-rw-r--r-- | Zend/zend_compile.h | 4 | ||||
-rw-r--r-- | Zend/zend_execute.c | 27 | ||||
-rw-r--r-- | Zend/zend_language_parser.y | 3 | ||||
-rw-r--r-- | Zend/zend_language_scanner.l | 4 | ||||
-rw-r--r-- | Zend/zend_opcode.c | 6 |
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); } |