Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:79384 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 85204 invoked from network); 2 Dec 2014 19:25:40 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 2 Dec 2014 19:25:40 -0000 Authentication-Results: pb1.pair.com smtp.mail=dmitry@zend.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=dmitry@zend.com; sender-id=pass Received-SPF: pass (pb1.pair.com: domain zend.com designates 209.85.220.181 as permitted sender) X-PHP-List-Original-Sender: dmitry@zend.com X-Host-Fingerprint: 209.85.220.181 mail-vc0-f181.google.com Received: from [209.85.220.181] ([209.85.220.181:61773] helo=mail-vc0-f181.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id CC/E0-13722-0321E745 for ; Tue, 02 Dec 2014 14:25:37 -0500 Received: by mail-vc0-f181.google.com with SMTP id le20so6026450vcb.26 for ; Tue, 02 Dec 2014 11:25:33 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=gQOy2vDrb/eHTNXg5fJVwr4UNDqfZEVZDLjkidfhqmw=; b=W95evTO0uw79OChS/CLQVCg6QkT2j3sxHA3dUdvsBByUxjBygfu13wWClwMFEhyLmo kNXAQGIYL4sGVLPOdUESyoj4Yiaq/HQBdN5LRyogp20jOBBtxTPuH6OBDHqIyUE9NzTl TefdWso7amFeOt9T1C6ffBF+jkYM8j6GSaImNugH2bAkmN0Jp0sgfJQDDdEbCOtUY5xo IZ+qs4k23eOceWly83LPTKcwUyO9jlCVLe0l2rWwFn62VtvDEyJwbps55DqS7h9XAiIV KF/IPFKMLLsjKF42+Q2ZN23i5HnuvJpbRys1Mv/ERQOPnFEXkxC6PHHZQ1/b5IBmSaU2 ZM6w== X-Gm-Message-State: ALoCoQnHzMUS1PEKhancteF27bIEilxBDo95fulHerqOBhUjeAWxveM4DbYbfWII6BOm7G8Hb1nyzDUHQiaFzUz7cEwTbc0QadkiTeX6hjQcrKnWx3FLr3wZ0XJuqhVXj7GRCidOSY4qWB63660HaRO5hJWtv77rOw== MIME-Version: 1.0 X-Received: by 10.52.252.3 with SMTP id zo3mr470076vdc.51.1417548333713; Tue, 02 Dec 2014 11:25:33 -0800 (PST) Received: by 10.52.176.231 with HTTP; Tue, 2 Dec 2014 11:25:33 -0800 (PST) In-Reply-To: References: Date: Tue, 2 Dec 2014 23:25:33 +0400 Message-ID: To: Levi Morrison Cc: Nikita Popov , Xinchen Hui , Stanislav Malyshev , Anatol Belski , PHP Internals Content-Type: multipart/alternative; boundary=001a1133e3b8e22ae0050940b0a8 Subject: Re: [PHP-DEV] Use zend_string* for op_array->arg_info[].name and class_name From: dmitry@zend.com (Dmitry Stogov) --001a1133e3b8e22ae0050940b0a8 Content-Type: text/plain; charset=UTF-8 I'm going to commit this, if nobody objects. Thanks. Dmitry. On Mon, Dec 1, 2014 at 2:08 PM, Dmitry Stogov wrote: > See the updated patch: > https://gist.github.com/dstogov/08b545de6bf113113f58 > it can be safely applied again and simplifies inheritance code (thanks to > Levi). > > The patch saves 60K (0.5%) of code segment, and make very slight speed > improvement (visible with callgrind) > All tests are passed. > > I think now the inheritance code is clear enough. > > Thanks. Dmitry. > > On Mon, Dec 1, 2014 at 11:02 AM, Dmitry Stogov wrote: > >> Hi Levi, >> >> I understood, that you don't see a big problems with the patch. :) >> >> According to your suggestions, It's possible to do it in this way, but >> it's going to be slower, because it would require additional memory >> allocation, but I agree that duplicating logic in the code isn't good. >> It must be better to write something like the following (I didn't test >> it, but it'll work): >> >> I'll update the patch. >> >> Thanks. Dmitry. >> >> char *class_name; >> size_t class_name_len; >> >> if (fe->type == ZEND_INTERNAL_FUNCTION) { >> class_name = ((zend_internal_arg_info*)fe_ >> arg_info)->class_name; >> class_name_len = strlen(class_name); >> } else { >> class_name = fe_arg_info->class_name->val; >> class_name_len = fe_arg_info-> >> class_name->len; >> } >> >> if (class_name_len == sizeof("parent")-1 && >> !zend_binary_strcasecmp(class_name, "parent", sizeof("parent")-1, >> sizeof("parent")-1) && >> proto->common.scope) { >> fe_class_name = zend_string_copy(proto->common.scope->name); >> } else if (class_name_len == sizeof("self")-1 && >> !zend_binary_strcasecmp(class_name, "self", sizeof("self")-1, >> sizeof("self")-1) && >> fe->common.scope) { >> fe_class_name = zend_string_copy(fe->common.scope->name); >> } else { >> fe_class_name = class_name; >> } >> >> >> On Fri, Nov 28, 2014 at 11:19 PM, Levi Morrison wrote: >> >>> > Please review the patch >>> https://gist.github.com/dstogov/47a39aff37f0a6441ea0 >>> >>> Instead of duplicating logic in two places I'd rather grab the >>> relevant data first, then do the logic once: >>> >>> zend_string *class_name; >>> if (fe->type == ZEND_INTERNAL_FUNCTION) { >>> class_name = zend_string_init( >>> ((zend_internal_arg_info*)fe_arg_info)->class_name, >>> strlen(((zend_internal_arg_info*)fe_arg_info)->class_name), 0 >>> ); >>> } else { >>> class_name = zend_string_dup(fe_arg_info->class_name); >>> } >>> >>> if (!zend_string_equals_literal_ci(class_name, "parent") && >>> proto->common.scope) { >>> fe_class_name = zend_string_copy(proto->common.scope->name); >>> } else if (!zend_string_equals_literal_ci(class_name, "self") && >>> fe->common.scope) { >>> fe_class_name = zend_string_copy(fe->common.scope->name); >>> } else { >>> fe_class_name = class_name; >>> } >>> zend_string_release(class_name); >>> >> >> > --001a1133e3b8e22ae0050940b0a8--