Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:88562 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 13387 invoked from network); 29 Sep 2015 16:40:57 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 29 Sep 2015 16:40:57 -0000 Authentication-Results: pb1.pair.com smtp.mail=codekestrel@googlemail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=codekestrel@googlemail.com; sender-id=pass Received-SPF: pass (pb1.pair.com: domain googlemail.com designates 209.85.212.169 as permitted sender) X-PHP-List-Original-Sender: codekestrel@googlemail.com X-Host-Fingerprint: 209.85.212.169 mail-wi0-f169.google.com Received: from [209.85.212.169] ([209.85.212.169:37680] helo=mail-wi0-f169.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id CF/61-05836-81FBA065 for ; Tue, 29 Sep 2015 12:40:57 -0400 Received: by wicfx3 with SMTP id fx3so24759828wic.0 for ; Tue, 29 Sep 2015 09:40:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=1i5yTvMHVop5UvxObUApovzlTFDfO+QH0xX9/FsonHs=; b=aMgFst6L4/3LzFROIpAf6+pm4nWnJsApsSR+mQ5EKD3DvH3jZsEQSypSurPzF4NfwP 9v73OBr5d5qp1ycxj53t0Tj5j+K39bzHgtaEFqIDlWqckjDwg9j3wOJj6WfqTN28MwFg 4+p1dCNJap+JuLmngKYEHwxUrkUsGzANnXvnP59JfZdzZOf4wmL+1sLKSQjNmKpudAoe qNdoeqosQX0sWvXeEwMn24Z3qSU2KqpAYzEmkw5EBsFih/hqwm+jHSQERiRQsQKpVZNj EyGZwvrqeTVJfX5JadDntN9LE7Yp3iSmoTE+lLTmOcHD1syTyoqL99IykGJYrrQrdpmn eMSQ== MIME-Version: 1.0 X-Received: by 10.180.219.106 with SMTP id pn10mr27879640wic.56.1443544854010; Tue, 29 Sep 2015 09:40:54 -0700 (PDT) Received: by 10.27.104.197 with HTTP; Tue, 29 Sep 2015 09:40:53 -0700 (PDT) Received: by 10.27.104.197 with HTTP; Tue, 29 Sep 2015 09:40:53 -0700 (PDT) In-Reply-To: References: Date: Tue, 29 Sep 2015 17:40:53 +0100 Message-ID: To: Joe Watkins Cc: PHP internals Content-Type: multipart/alternative; boundary=001a11346a703da6480520e57a87 Subject: Re: [PHP-DEV] Injecting structure to ZEND_NEW From: codekestrel@googlemail.com (Dominic Grostate) --001a11346a703da6480520e57a87 Content-Type: text/plain; charset=UTF-8 https://github.com/orolyn/php-src/blob/generics/Zend/zend_vm_def.h See opcode ZEND_TYPE_ARGUMENT. I haven't built the type_argument_list yet, but once I have I will need to pass it to the next op handler NEW. Where it will be passed to the modified second parameter of zend_fetch_class_by_name(). That function will be changed to decide if an existing class should be retrieved, or a new class should be dynamically created from a generic template. For now I'm focusing on figuring out how I can pass data around and this is my current road block. On 29 Sep 2015 5:32 pm, "Joe Watkins" wrote: > Sorry, I'm not able to make sense of what you are doing ... got a patch ? > > Cheers > Joe > > On Tue, Sep 29, 2015 at 5:29 PM, Dominic Grostate < > codekestrel@googlemail.com> wrote: > >> Hi, ive already started working with the handlers. I've set up the >> parser to accept addition syntax before the ctor. The type arguments are >> passed to a new opcode handler which triggers prior to NEW but after >> FETCH_CLASS (if dynamic, after resolve on CONST). >> >> This needs to override the fetching of the class during the current NEW >> handler, but to do that I need to supply addition data. >> >> Do you know what I mean? I'm sorry if I'm explaining it badly. >> On 29 Sep 2015 4:58 pm, "Joe Watkins" wrote: >> >>> lxr: zend_set_user_opcode_handler >>> >>> On Tue, Sep 29, 2015 at 4:57 PM, Joe Watkins >>> wrote: >>> >>>> I think you are looking for opcode handlers, what you want to do is >>>> implement a ZEND_NEW handler ... >>>> >>>> For reference, xdebug and uopz overload handlers, as well as many other >>>> extensions ... >>>> >>>> Cheers >>>> Joe >>>> >>>> On Tue, Sep 29, 2015 at 3:47 PM, Dominic Grostate < >>>> codekestrel@googlemail.com> wrote: >>>> >>>>> I'm trying to pass a new structure into the ZEND_NEW handler which >>>>> will be >>>>> used to change the behaviour of zend_fetch_class_by_name. >>>>> >>>>> The issue I'm having though is the operands won't support the new type >>>>> unless I compile it to zval, but I can't use zend_execute_data to >>>>> reference >>>>> that in a pre-handler since that appears to deal exclusively with >>>>> function >>>>> calls. >>>>> >>>>> op2 is taken on ZEND_NEW for the ctor skip, which is why I can't pass >>>>> a new >>>>> zval directly to it. Is there another means I can pass the structure >>>>> in? >>>>> >>>>> Dominic >>>>> >>>> >>>> >>> > --001a11346a703da6480520e57a87--