Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:63992 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 34671 invoked from network); 20 Nov 2012 13:08:02 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 20 Nov 2012 13:08:02 -0000 Authentication-Results: pb1.pair.com smtp.mail=dmitry@zend.com; spf=unknown; sender-id=unknown Authentication-Results: pb1.pair.com header.from=dmitry@zend.com; sender-id=unknown Received-SPF: unknown (pb1.pair.com: domain zend.com does not designate 209.85.215.42 as permitted sender) X-PHP-List-Original-Sender: dmitry@zend.com X-Host-Fingerprint: 209.85.215.42 mail-la0-f42.google.com Received: from [209.85.215.42] ([209.85.215.42:62114] helo=mail-la0-f42.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 13/52-19572-0B08BA05 for ; Tue, 20 Nov 2012 08:08:01 -0500 Received: by mail-la0-f42.google.com with SMTP id s15so4696527lag.29 for ; Tue, 20 Nov 2012 05:07:57 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :content-type:x-gm-message-state; bh=+5YvJxVNHVi5pMHRAArPCBJ02Ztg/9MPlzZ022ISTaA=; b=ZhSPCSZ1+NZNETDQmI86UBvsqHdRk753tjg0zf2BWCYH7CFsD9gg+RTK5jiP9LPqfX VBj2AG8x1W8XqCwrfueLf1KlWD7ckqH2DSfRBCJbJ6PZiMbGAd2FjnV1YdL1DKW7oEMA aclGHkK7JhZFUtcl+QzmjpU2nzoQocGSJmHBDgqcIn/kNbwuScM25sFy85mSqADJy7EL omU1taYpTwrbTg6DfH21JS5WfFxBEz/5NS8y1KOG56y0KzRuAHvBhH9rRRAUblhscCu5 fA6HPCBEdB7Sy5Gn5QgXbJhWicsZmvFCNpZBbQ+cCIJmHClakQjMFg9yyeWyesyWCLFV swsg== Received: by 10.152.135.41 with SMTP id pp9mr14802045lab.7.1353416877374; Tue, 20 Nov 2012 05:07:57 -0800 (PST) Received: from tpl2.home ([92.62.57.172]) by mx.google.com with ESMTPS id m3sm4889606lbb.13.2012.11.20.05.07.55 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 20 Nov 2012 05:07:56 -0800 (PST) Message-ID: <50AB80AA.7050604@zend.com> Date: Tue, 20 Nov 2012 17:07:54 +0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121029 Thunderbird/16.0.2 MIME-Version: 1.0 To: Derick Rethans CC: Nikita Popov , PHP Internals Content-Type: multipart/mixed; boundary="------------090404090108060206070805" X-Gm-Message-State: ALoCoQlJuQGYEkkR9oBOcEbYUaIF9VdqiS3fnqTs/+TZvhPu+aJTSCog6o1zaDSd4TGHXjIf8tYzXxRZomGiKpzofVRgjNTRja9hhGXRA+iiO3FbRqTDpI9iu8ev58Kr3FJ9UG5pB+Jr Subject: Debuggers support for generators From: dmitry@zend.com (Dmitry Stogov) --------------090404090108060206070805 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi Derick, The attached patch must enable generators support in XDebug. XDebug would need override zend_execute_ex (instead of zend_execute). EG(current_execute_data) is going to be different there. You can use EG(current_execute_data)->prev_execute_data instead. I would appreciate, if you test the patch and tell me if XDebug still has any PHP-5.5 related problems. Thanks. Dmitry. --------------090404090108060206070805 Content-Type: text/plain; charset=UTF-8; name="php5.5.diff.txt" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="php5.5.diff.txt" diff --git a/Zend/zend.c b/Zend/zend.c index 9ab879a..e34634c 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -684,10 +684,12 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions TS /* build with dtrace support */ zend_compile_file = dtrace_compile_file; zend_execute = dtrace_execute; + zend_execute_ex = execute_ex; /* FIXME: dtrace support for generators */ zend_execute_internal = dtrace_execute_internal; #else zend_compile_file = compile_file; zend_execute = execute; + zend_execute_ex = execute_ex; zend_execute_internal = NULL; #endif /* HAVE_SYS_SDT_H */ zend_compile_string = compile_string; diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h index 4594eba..2d7f9ed 100644 --- a/Zend/zend_execute.h +++ b/Zend/zend_execute.h @@ -51,6 +51,7 @@ typedef union _temp_variable { BEGIN_EXTERN_C() struct _zend_fcall_info; ZEND_API extern void (*zend_execute)(zend_op_array *op_array TSRMLS_DC); +ZEND_API extern void (*zend_execute_ex)(zend_execute_data *execute_data TSRMLS_DC); ZEND_API extern void (*zend_execute_internal)(zend_execute_data *execute_data_ptr, struct _zend_fcall_info *fci, int return_value_used TSRMLS_DC); void init_executor(TSRMLS_D); diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index 9787966..fe2f46c 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -39,6 +39,7 @@ #endif ZEND_API void (*zend_execute)(zend_op_array *op_array TSRMLS_DC); +ZEND_API void (*zend_execute_ex)(zend_execute_data *execute_data TSRMLS_DC); ZEND_API void (*zend_execute_internal)(zend_execute_data *execute_data_ptr, zend_fcall_info *fci, int return_value_used TSRMLS_DC); /* true globals */ diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c index 87f0644..2826a23 100644 --- a/Zend/zend_generators.c +++ b/Zend/zend_generators.c @@ -533,7 +533,7 @@ void zend_generator_resume(zend_generator *generator TSRMLS_DC) /* {{{ */ /* Resume execution */ generator->flags |= ZEND_GENERATOR_CURRENTLY_RUNNING; - execute_ex(generator->execute_data TSRMLS_CC); + zend_execute_ex(generator->execute_data TSRMLS_CC); generator->flags &= ~ZEND_GENERATOR_CURRENTLY_RUNNING; /* Restore executor globals */ diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index b06c09f..3d9b0d7 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2048,7 +2048,7 @@ ZEND_VM_HELPER(zend_do_fcall_common_helper, ANY, ANY) if (RETURN_VALUE_USED(opline)) { EX_T(opline->result.var).var.ptr = zend_generator_create_zval(EG(active_op_array) TSRMLS_CC); } - } else if (EXPECTED(zend_execute == execute)) { + } else if (EXPECTED(zend_execute == execute && zend_execute_ex == execute_ex)) { if (EXPECTED(EG(exception) == NULL)) { ZEND_VM_ENTER(); } @@ -3954,7 +3954,7 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMP|VAR|CV, ANY) zend_rebuild_symbol_table(TSRMLS_C); } - if (EXPECTED(zend_execute == execute)) { + if (EXPECTED(zend_execute == execute && zend_execute_ex == execute_ex)) { ZEND_VM_ENTER(); } else { zend_execute(new_op_array TSRMLS_CC); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 7a2cfc8..81a6b09 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -458,7 +458,7 @@ ZEND_API void execute(zend_op_array *op_array TSRMLS_DC) if (EG(exception)) { return; } - execute_ex(zend_create_execute_data_from_op_array(op_array, 0 TSRMLS_CC) TSRMLS_CC); + zend_execute_ex(zend_create_execute_data_from_op_array(op_array, 0 TSRMLS_CC) TSRMLS_CC); } static int ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS) @@ -669,7 +669,7 @@ static int ZEND_FASTCALL zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_AR if (RETURN_VALUE_USED(opline)) { EX_T(opline->result.var).var.ptr = zend_generator_create_zval(EG(active_op_array) TSRMLS_CC); } - } else if (EXPECTED(zend_execute == execute)) { + } else if (EXPECTED(zend_execute == execute && zend_execute_ex == execute_ex)) { if (EXPECTED(EG(exception) == NULL)) { ZEND_VM_ENTER(); } @@ -2879,7 +2879,7 @@ static int ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HA zend_rebuild_symbol_table(TSRMLS_C); } - if (EXPECTED(zend_execute == execute)) { + if (EXPECTED(zend_execute == execute && zend_execute_ex == execute_ex)) { ZEND_VM_ENTER(); } else { zend_execute(new_op_array TSRMLS_CC); @@ -8201,7 +8201,7 @@ static int ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HAND zend_rebuild_symbol_table(TSRMLS_C); } - if (EXPECTED(zend_execute == execute)) { + if (EXPECTED(zend_execute == execute && zend_execute_ex == execute_ex)) { ZEND_VM_ENTER(); } else { zend_execute(new_op_array TSRMLS_CC); @@ -13539,7 +13539,7 @@ static int ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER(ZEND_OPCODE_HAND zend_rebuild_symbol_table(TSRMLS_C); } - if (EXPECTED(zend_execute == execute)) { + if (EXPECTED(zend_execute == execute && zend_execute_ex == execute_ex)) { ZEND_VM_ENTER(); } else { zend_execute(new_op_array TSRMLS_CC); @@ -31096,7 +31096,7 @@ static int ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDL zend_rebuild_symbol_table(TSRMLS_C); } - if (EXPECTED(zend_execute == execute)) { + if (EXPECTED(zend_execute == execute && zend_execute_ex == execute_ex)) { ZEND_VM_ENTER(); } else { zend_execute(new_op_array TSRMLS_CC); diff --git a/Zend/zend_vm_execute.skl b/Zend/zend_vm_execute.skl index 2a6fd71..035177a 100644 --- a/Zend/zend_vm_execute.skl +++ b/Zend/zend_vm_execute.skl @@ -109,7 +109,7 @@ ZEND_API void {%EXECUTOR_NAME%}(zend_op_array *op_array TSRMLS_DC) if (EG(exception)) { return; } - {%EXECUTOR_NAME%}_ex(zend_create_execute_data_from_op_array(op_array, 0 TSRMLS_CC) TSRMLS_CC); + zend_{%EXECUTOR_NAME%}_ex(zend_create_execute_data_from_op_array(op_array, 0 TSRMLS_CC) TSRMLS_CC); } {%EXTERNAL_EXECUTOR%} --------------090404090108060206070805--