Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:42465 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 45781 invoked from network); 3 Jan 2009 17:58:59 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 3 Jan 2009 17:58:59 -0000 Authentication-Results: pb1.pair.com smtp.mail=helly@php.net; spf=unknown; sender-id=unknown Authentication-Results: pb1.pair.com header.from=helly@php.net; sender-id=unknown Received-SPF: unknown (pb1.pair.com: domain php.net does not designate 85.214.94.56 as permitted sender) X-PHP-List-Original-Sender: helly@php.net X-Host-Fingerprint: 85.214.94.56 aixcept.net Linux 2.6 Received: from [85.214.94.56] ([85.214.94.56:35999] helo=h1149922.serverkompetenz.net) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 08/07-01547-167AF594 for ; Sat, 03 Jan 2009 12:58:58 -0500 Received: from MBOERGER-ZRH.corp.google.com (238-135.62-81.cust.bluewin.ch [81.62.135.238]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by h1149922.serverkompetenz.net (Postfix) with ESMTP id 2829F11EFCD for ; Sat, 3 Jan 2009 18:58:53 +0100 (CET) Date: Sat, 3 Jan 2009 18:56:03 +0100 Reply-To: Marcus Boerger X-Priority: 3 (Normal) Message-ID: <1279278680.20090103185603@marcus-boerger.de> To: PHP Internals In-Reply-To: <145582992.20090103154744@marcus-boerger.de> References: <08AA10DA-2704-415C-8A8C-893C89990DC1@bitextender.com> <868073456.20081231173818@marcus-boerger.de> <1230920192.6125.141.camel@goldfinger> <145582992.20090103154744@marcus-boerger.de> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----------2396ED26A5E25A" Subject: Re: [PHP-DEV] [RFC] Re: [PHP-DEV] __invoke() weirdness From: helly@php.net (Marcus Boerger) ------------2396ED26A5E25A Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 8bit Hello all, current state of the patch is attached. marcus Saturday, January 3, 2009, 3:47:44 PM, you wrote: > Hello Johannes, > Friday, January 2, 2009, 7:16:32 PM, you wrote: >> Hi, >> On Wed, 2008-12-31 at 17:38 +0100, Marcus Boerger wrote: >>> So far it is. Yet I as much as you do not like the inconsistency. So I >>> spend a little bit on providing the following patch that should do >>> what >>> you were looking for. >> I thought bout this issue for one day or so, there are three things to >> consider here: >> - the language design question >> - implementation-related things >> - getting 5.3 out >> For the first question I have to say that this is a major change to >> language. Bringing this feature in makes it a mixture of a class-based >> OO model and JavaScript-like class-less OO model. As I tend to read way >> more code than I write I, personally, prefer the clearer class based >> approach. >> Nonetheless there seems to be large support for this, so let's lake a >> deeper look: >>> The disadvantage: Calling properties is case sensitive while calling >>> methods isn't. But since this has nothign to do with this patch and >>> the patch only increases consistency I am all for applying it. >> That's one of the symptoms of the underlying problem we're having: In >> our object implementation methods and properties are kept completely >> separated. Using properties now like methods will have side effects, one >> is described above. I found another one today: >> > class A { >> public $p; >> public function __construct() { >> $this->p = function() { echo 1; }; >> } >> } >> class B extends A { >> private function p() { >> echo 2; >> } >> } >> $a = new A(); >> $b = new B(); >> $a->p(); >> $b->p(); ?>>> >> What do you expect? Well, the first call, to $a->p(); works, the second >> one, to $b->p();, doesn't since where accessing the private method >> B::p(). >> $ sapi/cli/php test.php >> 1 >> Fatal error: Call to undefined method B::p() in test.php on line 16 >> Depending on your view on this that result can be correct or wrong, it >> might even be wrong in different ways, maybe overwriting $a->p with >> $b->p should be forbidden, maybe it should treat private elements like >> non-existent ones. >> The obvious thing is that it feels like the "is-a" relationship isn't >> enforced anymore. > First, for properties we already have that anyway. Remember you can add > properties to object instances at any time. So being able to add methods > at any time just reduces one more inconsistency between things. Also > since properties follow a mixture of class based and prototype based > object model we have to respect prototype semantics for the parts where > proptotype model is used. This means when you dynamically add a closure > then this is done in the manner of prototype semantics and needs to follow > it. Thus with a slightly different code the result is perfectly correct: > class A { > // public $p; > } > class B extends A { > private function p() { > echo 2; > } > } > $a = new A(); > $b = new B(); > $a->p = function() { echo 1; }; > $a->p(); > $b->p(); ?>> > So this raises the question what the status quo without the patch is: > class Test { > public $func; > function __construct() { > $this->func = function() { > echo __METHOD__ . "()\n"; > }; > } > private function func() { > echo __METHOD__ . "()\n"; > } > } > $o = new Test; > $f = $o->func; > $f(); // Test::{closure}() > $o->func(); // Error call to private method... > So apparently we already have the exact issue at hand and we take > precedence in the actual function which in my opinion is a good > choice. And this also is exactly the behavior your example with the > patch applies shows. > To summarize this from my point of view we only get a bit more of > consistency. But for people with a JavaScript background we get a > lot more. As we now support what they are used to and that actually > is a pretty big advantage. > However if that is the intention, then something we might want to look > into in order to make it easier for those people is to fix something > that propbably looks wrong to them. That is binding a closure to a > property outside of the scope of the object does not bind the object > to the this_ptr as it would in case the assignment is done inside the > object scope (a class method). But once again this is somethign to be > fixed whether or not we apply the patch. >> Additionally there are other areas with such conflicts: Reflection >> (ReflectionMethod doesn't work, ReflectionProperty has no hint it's >> executable, ...) and other meta-functionality are obvious, others might >> (and will) be quite hidden. > Reflection now has closure support. >> I guess the only solid way to implement that feature would be by merging >> the property and method tables into an "element" table so we reduce such >> conflicts -- while that's a major engine and language change. Every >> other approach will have side-effects. > That would mean a major change in language and we should not go that route. >> This leads us to the third consideration: 5.3 is around 1.5 years in >> development now with lots of new features. It was announced that we >> wanted to go to a beta status to get it out soon ("release early, >> release often" ...) >> I'd say it would be good to concentrate on making 5.3 stable and then >> see how new features are accepted. If users really demand such a >> functionality, when using closures for "real life" development, we can >> still add it, but that should be done with the time needed to identify >> side-effects and other consequences, not in a rush during holiday season >> after a feature freeze has been announced. > Stable also means stable features and semantics. And that includes trying > to get rid of inconsistencies. > marcus > Best regards, > Marcus Best regards, Marcus ------------2396ED26A5E25A Content-Type: text/plain; name="ze2-callable-properties-5.3-20090103.diff.txt" Content-transfer-encoding: base64 Content-Disposition: attachment; filename="ze2-callable-properties-5.3-20090103.diff.txt" SW5kZXg6IFplbmQvemVuZF9vYmplY3RfaGFuZGxlcnMuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvcmVwb3NpdG9yeS9aZW5kRW5naW5lMi96ZW5kX29iamVjdF9oYW5kbGVycy5jLHYK cmV0cmlldmluZyByZXZpc2lvbiAxLjEzNS4yLjYuMi4yMi4yLjI0CmRpZmYgLXUgLXAgLWQg LXIxLjEzNS4yLjYuMi4yMi4yLjI0IHplbmRfb2JqZWN0X2hhbmRsZXJzLmMKLS0tIFplbmQv emVuZF9vYmplY3RfaGFuZGxlcnMuYwkzIEphbiAyMDA5IDE3OjQ4OjM5IC0wMDAwCTEuMTM1 LjIuNi4yLjIyLjIuMjQKKysrIFplbmQvemVuZF9vYmplY3RfaGFuZGxlcnMuYwkzIEphbiAy MDA5IDE3OjUxOjI0IC0wMDAwCkBAIC03OTUsNiArNzk1LDI1IEBAIHN0YXRpYyB1bmlvbiBf emVuZF9mdW5jdGlvbiAqemVuZF9zdGRfZ2UKIAogCXpvYmogPSBaX09CSl9QKG9iamVjdCk7 CiAJaWYgKHplbmRfaGFzaF9maW5kKCZ6b2JqLT5jZS0+ZnVuY3Rpb25fdGFibGUsIGxjX21l dGhvZF9uYW1lLCBtZXRob2RfbGVuKzEsICh2b2lkICoqKSZmYmMpID09IEZBSUxVUkUpIHsK KwkJLyogQ2FsbGluZyBjbG9zdXJlcyB2aWEgcHJvcGVydGllcyBpcyBzdGlsbCBkaXNhYmxl ZCAqLworCQl6dmFsICoqY2FsbGFibGUsIG1lbWJlcjsKKwkJemVuZF9wcm9wZXJ0eV9pbmZv ICpwcm9wZXJ0eV9pbmZvOworCisJCVpWQUxfU1RSSU5HTCgmbWVtYmVyLCBtZXRob2RfbmFt ZSwgbWV0aG9kX2xlbiwgMCk7CisJCXByb3BlcnR5X2luZm8gPSB6ZW5kX2dldF9wcm9wZXJ0 eV9pbmZvKHpvYmotPmNlLCAmbWVtYmVyLCAxIFRTUk1MU19DQyk7CisKKwkJaWYgKHByb3Bl cnR5X2luZm8gJiYgemVuZF9oYXNoX3F1aWNrX2ZpbmQoem9iai0+cHJvcGVydGllcywgcHJv cGVydHlfaW5mby0+bmFtZSwgcHJvcGVydHlfaW5mby0+bmFtZV9sZW5ndGgrMSwgcHJvcGVy dHlfaW5mby0+aCwgKHZvaWQgKiopICZjYWxsYWJsZSkgPT0gU1VDQ0VTUykgeworCQkJenZh bCAqY2FsbGFibGVfb2JqOworCQkJemVuZF9jbGFzc19lbnRyeSAqY2VfcHRyOworCisJCQlp ZiAoWl9UWVBFX1BQKGNhbGxhYmxlKSA9PSBJU19PQkpFQ1QKKwkJCSYmIFpfT0JKX0hBTkRM RVJfUFAoY2FsbGFibGUsIGdldF9jbG9zdXJlKQorCQkJJiYgWl9PQkpfSEFORExFUl9QUChj YWxsYWJsZSwgZ2V0X2Nsb3N1cmUpKCpjYWxsYWJsZSwgJmNlX3B0ciwgJmZiYywgJmNhbGxh YmxlX29iaiBUU1JNTFNfQ0MpID09IFNVQ0NFU1MpIHsKKwkJCQkqb2JqZWN0X3B0ciA9IGNh bGxhYmxlX29iajsKKwkJCQlmcmVlX2FsbG9jYShsY19tZXRob2RfbmFtZSwgdXNlX2hlYXAp OworCQkJCXJldHVybiBmYmM7CisJCQl9CisJCX0gCiAJCWZyZWVfYWxsb2NhKGxjX21ldGhv ZF9uYW1lLCB1c2VfaGVhcCk7CiAJCWlmICh6b2JqLT5jZS0+X19jYWxsKSB7CiAJCQl6ZW5k X2ludGVybmFsX2Z1bmN0aW9uICpjYWxsX3VzZXJfY2FsbCA9IGVtYWxsb2Moc2l6ZW9mKHpl bmRfaW50ZXJuYWxfZnVuY3Rpb24pKTsKSW5kZXg6IFplbmQvdGVzdHMvY2xvc3VyZV9wcm9w ZXJ0eV8wMDIucGhwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBaZW5kL3Rlc3RzL2Nsb3N1 cmVfcHJvcGVydHlfMDAyLnBocHQKZGlmZiAtTiBaZW5kL3Rlc3RzL2Nsb3N1cmVfcHJvcGVy dHlfMDAyLnBocHQKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisr KyBaZW5kL3Rlc3RzL2Nsb3N1cmVfcHJvcGVydHlfMDAyLnBocHQJMyBKYW4gMjAwOSAxNzo1 MToyNCAtMDAwMApAQCAtMCwwICsxLDQ1IEBACistLVRFU1QtLQorQ2xvc3VyZSBwcm9wZXJ0 eSAwMDI6IENhbGxpbmcgcHJvcGVydHkgQ2xvc3VyZQorLS1GSUxFLS0KKzw/cGhwCisKK2Ns YXNzIFRlc3QgeworCXB1YmxpYyAkZnVuYzsKKwlmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHsK KwkJJHRoaXMtPmZ1bmMgPSBmdW5jdGlvbigpIHsKKwkJCWVjaG8gX19NRVRIT0RfXyAuICIo KVxuIjsKKwkJfTsKKwl9Cit9CisKKyRvID0gbmV3IFRlc3Q7CitSZWZsZWN0aW9uUHJvcGVy dHk6OmV4cG9ydCgkbywgJ2Z1bmMnKTsKK3Zhcl9kdW1wKCRvLT5mdW5jKTsKKyRmID0gJG8t PmZ1bmM7CiskZigpOworJG8tPmZ1bmMoKTsKKworPz4KKz09PURPTkU9PT0KKy0tRVhQRUNU Ri0tCitQcm9wZXJ0eSBbIDxkZWZhdWx0PiBwdWJsaWMgJGZ1bmMgXQorCitvYmplY3QoQ2xv c3VyZSkjJWQgKDEpIHsKKyAgWyJ0aGlzIl09PgorICBvYmplY3QoVGVzdCkjJWQgKDEpIHsK KyAgICBbImZ1bmMiXT0+CisgICAgb2JqZWN0KENsb3N1cmUpIyVkICgxKSB7CisgICAgICBb InRoaXMiXT0+CisgICAgICBvYmplY3QoVGVzdCkjJWQgKDEpIHsKKyAgICAgICAgWyJmdW5j Il09PgorICAgICAgICBvYmplY3QoQ2xvc3VyZSkjJWQgKDEpIHsKKyAgICAgICAgICBbInRo aXMiXT0+CisgICAgICAgICAgKlJFQ1VSU0lPTioKKyAgICAgICAgfQorICAgICAgfQorICAg IH0KKyAgfQorfQorVGVzdDo6e2Nsb3N1cmV9KCkKK1Rlc3Q6OntjbG9zdXJlfSgpCis9PT1E T05FPT09CkluZGV4OiBaZW5kL3Rlc3RzL2Nsb3N1cmVfcHJvcGVydHlfMDAzLnBocHQKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpSQ1MgZmlsZTogWmVuZC90ZXN0cy9jbG9zdXJlX3Byb3BlcnR5XzAwMy5w aHB0CmRpZmYgLU4gWmVuZC90ZXN0cy9jbG9zdXJlX3Byb3BlcnR5XzAwMy5waHB0Ci0tLSAv ZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgWmVuZC90ZXN0cy9jbG9z dXJlX3Byb3BlcnR5XzAwMy5waHB0CTMgSmFuIDIwMDkgMTc6NTE6MjQgLTAwMDAKQEAgLTAs MCArMSw0OCBAQAorLS1URVNULS0KK0Nsb3N1cmUgcHJvcGVydHkgMDAzOiBDYWxsaW5nIHBy b3BlcnR5IHN1cHBvcnRpbmcgX19pbnZva2UKKy0tSU5JLS0KK2RhdGUudGltZXpvbmU9VVRD CistLUZJTEUtLQorPD9waHAKKworY2xhc3MgQ3VycnkKK3sKKyAgcHJvdGVjdGVkICRjYWxs YWJsZTsKKyAgcHJvdGVjdGVkICRhcmdzOworCisgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24g Y3JlYXRlKCRjYWxsYWJsZSkKKyAgeworICAgICRjdXJyeSA9IG5ldyBzZWxmKCRjYWxsYWJs ZSwgYXJyYXlfc2xpY2UoZnVuY19nZXRfYXJncygpLCAxKSk7CisgICAgcmV0dXJuICRjdXJy eTsKKyAgfQorCisgIHByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY2FsbGFibGUs ICRhcmdzKQorICB7CisgICAgJHRoaXMtPmNhbGxhYmxlID0gJGNhbGxhYmxlOworICAgICR0 aGlzLT5hcmdzID0gJGFyZ3M7CisgIH0KKworICBwdWJsaWMgZnVuY3Rpb24gX19pbnZva2Uo KQorICB7CisgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jX2FycmF5KCR0aGlzLT5jYWxsYWJs ZSwgYXJyYXlfbWVyZ2UoJHRoaXMtPmFyZ3MsIGZ1bmNfZ2V0X2FyZ3MoKSkpOworICB9Cit9 CisKKyRkID0gbmV3IERhdGVUaW1lKCk7CiskZ2V0QXRvbSA9IEN1cnJ5OjpjcmVhdGUoYXJy YXkoJGQsICdmb3JtYXQnKSwgREFURV9BVE9NKTsKK3Zhcl9kdW1wKGlzX0NhbGxhYmxlKCRn ZXRBdG9tKSk7Cit2YXJfZHVtcCgkZ2V0QXRvbSgpKTsKKworJGQgPSBuZXcgRGF0ZVRpbWUo KTsKKyRkLT5nZXRBdG9tID0gQ3Vycnk6OmNyZWF0ZShhcnJheSgkZCwgJ2Zvcm1hdCcpLCBE QVRFX0FUT00pOwordmFyX2R1bXAoaXNfQ2FsbGFibGUoJGQtPmdldEF0b20pKTsKK3Zhcl9k dW1wKCRkLT5nZXRBdG9tKCkpOworCis/PgorPT09RE9ORT09PQorLS1FWFBFQ1RGLS0KK2Jv b2wodHJ1ZSkKK3N0cmluZyglZCkgIjIlZC0lZC0lZFQlZDolZDolZCVzIgorYm9vbCh0cnVl KQorc3RyaW5nKCVkKSAiMiVkLSVkLSVkVCVkOiVkOiVkJXMiCis9PT1ET05FPT09CkluZGV4 OiBaZW5kL3Rlc3RzL2Nsb3N1cmVfcHJvcGVydHlfMDA0LnBocHQKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS Q1MgZmlsZTogWmVuZC90ZXN0cy9jbG9zdXJlX3Byb3BlcnR5XzAwNC5waHB0CmRpZmYgLU4g WmVuZC90ZXN0cy9jbG9zdXJlX3Byb3BlcnR5XzAwNC5waHB0Ci0tLSAvZGV2L251bGwJMSBK YW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgWmVuZC90ZXN0cy9jbG9zdXJlX3Byb3BlcnR5 XzAwNC5waHB0CTMgSmFuIDIwMDkgMTc6NTE6MjQgLTAwMDAKQEAgLTAsMCArMSw0MyBAQAor LS1URVNULS0KK0Nsb3N1cmUgcHJvcGVydHkgMDA0OiBDYWxsaW5nIGR5bmFtaWMgcHJvcGVy dHkgQ2xvc3VyZSAobm90IHN1cHBvcnRlZCkKKy0tRklMRS0tCis8P3BocAorCitjbGFzcyBU ZXN0IHsKKwlwdWJsaWMgJG1ldGhvZHMgPSBhcnJheSgpOworCWZ1bmN0aW9uIF9faXNzZXQo JG5hbWUpIHsKKwkJZWNobyBfX01FVEhPRF9fIC4gIigkbmFtZSlcbiI7CisJCXJldHVybiBp c3NldCgkdGhpcy0+bWV0aG9kc1skbmFtZV0pOworCX0KKwlmdW5jdGlvbiBfX2dldCgkbmFt ZSkgeworCQllY2hvIF9fTUVUSE9EX18gLiAiKCRuYW1lKVxuIjsKKwkJcmV0dXJuICR0aGlz LT5tZXRob2RzWyRuYW1lXTsKKwl9CisJZnVuY3Rpb24gX19zZXQoJG5hbWUsICRkYXRhKSB7 CisJCWVjaG8gX19NRVRIT0RfXyAuICIoJG5hbWUpXG4iOworCQkkdGhpcy0+bWV0aG9kc1sk bmFtZV0gPSAkZGF0YTsKKwl9CisJZnVuY3Rpb24gX190b1N0cmluZygpIHsKKwkJcmV0dXJu IF9fQ0xBU1NfXzsKKwl9Cit9CisKKyRvID0gbmV3IFRlc3Q7Cit2YXJfZHVtcChpc3NldCgk by0+ZnVuYykpOworJG8tPmZ1bmMgPSBmdW5jdGlvbigpIHsKKwllY2hvIF9fTUVUSE9EX18g LiAiKCIgLiB2YXJfZXhwb3J0KCR0aGlzLCB0cnVlKSAuICIpXG4iOworfTsKK3Zhcl9kdW1w KGlzc2V0KCRvLT5mdW5jKSk7Ciskby0+ZnVuYygpOwordmFyX2R1bXAoJG8tPmZ1bmMpOwor Cis/PgorPT09RE9ORT09PQorLS1FWFBFQ1RGLS0KK1Rlc3Q6Ol9faXNzZXQoZnVuYykKK2Jv b2woZmFsc2UpCitUZXN0OjpfX3NldChmdW5jKQorVGVzdDo6X19pc3NldChmdW5jKQorYm9v bCh0cnVlKQorCitGYXRhbCBlcnJvcjogQ2FsbCB0byB1bmRlZmluZWQgbWV0aG9kIFRlc3Q6 OmZ1bmMoKSBpbiAlc2Nsb3N1cmVfcHJvcGVydHlfMDA0LnBocCBvbiBsaW5lICVkCkluZGV4 OiBaZW5kL3Rlc3RzL2Nsb3N1cmVfcHJvcGVydHlfMDA1LnBocHQKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS Q1MgZmlsZTogWmVuZC90ZXN0cy9jbG9zdXJlX3Byb3BlcnR5XzAwNS5waHB0CmRpZmYgLU4g WmVuZC90ZXN0cy9jbG9zdXJlX3Byb3BlcnR5XzAwNS5waHB0Ci0tLSAvZGV2L251bGwJMSBK YW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgWmVuZC90ZXN0cy9jbG9zdXJlX3Byb3BlcnR5 XzAwNS5waHB0CTMgSmFuIDIwMDkgMTc6NTE6MjQgLTAwMDAKQEAgLTAsMCArMSwzMSBAQAor LS1URVNULS0KK0Nsb3N1cmUgcHJvcGVydHkgMDA1OiBDYWxsaW5nIGNsb3N1cmUgcHJvcGVy dHkgdmlhIHZhcmlhYmxlCistLUZJTEUtLQorPD9waHAKKworY2xhc3MgVGVzdCB7CisJcHVi bGljICRmdW5jMTsKKwlmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHsKKwkJJHRoaXMtPmZ1bmMx ID0gZnVuY3Rpb24oKSB7CisJCQllY2hvIF9fTUVUSE9EX18gLiAiKClcbiI7CisJCX07CisJ fQorfQorCiskbyA9IG5ldyBUZXN0OworJG4gPSAnZnVuYzEnOworJG8tPiRuKCk7CisKKyRv LT5mdW5jMiA9IGZ1bmN0aW9uKCkgeworCWVjaG8gX19NRVRIT0RfXyAuICIoKVxuIjsKK307 CisKKyRuID0gJ2Z1bmMyJzsKKyRvLT4kbigpOworCis/PgorPT09RE9ORT09PQorLS1FWFBF Q1RGLS0KK1Rlc3Q6OntjbG9zdXJlfSgpCit7Y2xvc3VyZX0oKQorPT09RE9ORT09PQo= ------------2396ED26A5E25A Content-Type: text/plain; name="ze2-callable-properties-6.0-20090103.diff.txt" Content-transfer-encoding: base64 Content-Disposition: attachment; filename="ze2-callable-properties-6.0-20090103.diff.txt" SW5kZXg6IFplbmQvemVuZF9vYmplY3RfaGFuZGxlcnMuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvcmVwb3NpdG9yeS9aZW5kRW5naW5lMi96ZW5kX29iamVjdF9oYW5kbGVycy5jLHYK cmV0cmlldmluZyByZXZpc2lvbiAxLjIwOQpkaWZmIC11IC1wIC1kIC1yMS4yMDkgemVuZF9v YmplY3RfaGFuZGxlcnMuYwotLS0gWmVuZC96ZW5kX29iamVjdF9oYW5kbGVycy5jCTMgSmFu IDIwMDkgMTc6NDY6MjQgLTAwMDAJMS4yMDkKKysrIFplbmQvemVuZF9vYmplY3RfaGFuZGxl cnMuYwkzIEphbiAyMDA5IDE3OjUxOjA4IC0wMDAwCkBAIC04MDUsNiArODA1LDI1IEBAIHN0 YXRpYyB1bmlvbiBfemVuZF9mdW5jdGlvbiAqemVuZF9zdGRfZ2UKIAogCXpvYmogPSBaX09C Sl9QKG9iamVjdCk7CiAJaWYgKHplbmRfdV9oYXNoX2ZpbmQoJnpvYmotPmNlLT5mdW5jdGlv bl90YWJsZSwgdHlwZSwgbGNfbWV0aG9kX25hbWUsIGxjX21ldGhvZF9uYW1lX2xlbisxLCAo dm9pZCAqKikmZmJjKSA9PSBGQUlMVVJFKSB7CisJCS8qIENhbGxpbmcgY2xvc3VyZXMgdmlh IHByb3BlcnRpZXMgaXMgc3RpbGwgZGlzYWJsZWQgKi8KKwkJenZhbCAqKmNhbGxhYmxlLCBt ZW1iZXI7CisJCXplbmRfcHJvcGVydHlfaW5mbyAqcHJvcGVydHlfaW5mbzsKKworCQlaVkFM X1RFWFRMKCZtZW1iZXIsIG1ldGhvZF9uYW1lLCBtZXRob2RfbGVuLCAwKTsKKwkJcHJvcGVy dHlfaW5mbyA9IHplbmRfZ2V0X3Byb3BlcnR5X2luZm8oem9iai0+Y2UsICZtZW1iZXIsIDEg VFNSTUxTX0NDKTsKKworCQlpZiAocHJvcGVydHlfaW5mbyAmJiB6ZW5kX3VfaGFzaF9xdWlj a19maW5kKHpvYmotPnByb3BlcnRpZXMsIFpfVFlQRShtZW1iZXIpLCBwcm9wZXJ0eV9pbmZv LT5uYW1lLCBwcm9wZXJ0eV9pbmZvLT5uYW1lX2xlbmd0aCsxLCBwcm9wZXJ0eV9pbmZvLT5o LCAodm9pZCAqKikgJmNhbGxhYmxlKSA9PSBTVUNDRVNTKSB7CisJCQl6dmFsICpjYWxsYWJs ZV9vYmo7CisJCQl6ZW5kX2NsYXNzX2VudHJ5ICpjZV9wdHI7CisKKwkJCWlmIChaX1RZUEVf UFAoY2FsbGFibGUpID09IElTX09CSkVDVAorCQkJJiYgWl9PQkpfSEFORExFUl9QUChjYWxs YWJsZSwgZ2V0X2Nsb3N1cmUpCisJCQkmJiBaX09CSl9IQU5ETEVSX1BQKGNhbGxhYmxlLCBn ZXRfY2xvc3VyZSkoKmNhbGxhYmxlLCAmY2VfcHRyLCAmZmJjLCAmY2FsbGFibGVfb2JqIFRT Uk1MU19DQykgPT0gU1VDQ0VTUykgeworCQkJCSpvYmplY3RfcHRyID0gY2FsbGFibGVfb2Jq OworCQkJCWVmcmVlKGxjX21ldGhvZF9uYW1lLnYpOworCQkJCXJldHVybiBmYmM7CisJCQl9 CisJCX0KIAkJZWZyZWUobGNfbWV0aG9kX25hbWUudik7CiAJCWlmICh6b2JqLT5jZS0+X19j YWxsKSB7CiAJCQl6ZW5kX2ludGVybmFsX2Z1bmN0aW9uICpjYWxsX3VzZXJfY2FsbCA9IGVt YWxsb2Moc2l6ZW9mKHplbmRfaW50ZXJuYWxfZnVuY3Rpb24pKTsKSW5kZXg6IFplbmQvdGVz dHMvY2xvc3VyZV9wcm9wZXJ0eV8wMDIucGhwdAo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBa ZW5kL3Rlc3RzL2Nsb3N1cmVfcHJvcGVydHlfMDAyLnBocHQKZGlmZiAtTiBaZW5kL3Rlc3Rz L2Nsb3N1cmVfcHJvcGVydHlfMDAyLnBocHQKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAw OjAwOjAwIC0wMDAwCisrKyBaZW5kL3Rlc3RzL2Nsb3N1cmVfcHJvcGVydHlfMDAyLnBocHQJ MyBKYW4gMjAwOSAxNzo1MTowOSAtMDAwMApAQCAtMCwwICsxLDQ1IEBACistLVRFU1QtLQor Q2xvc3VyZSBwcm9wZXJ0eSAwMDI6IENhbGxpbmcgcHJvcGVydHkgQ2xvc3VyZQorLS1GSUxF LS0KKzw/cGhwCisKK2NsYXNzIFRlc3QgeworCXB1YmxpYyAkZnVuYzsKKwlmdW5jdGlvbiBf X2NvbnN0cnVjdCgpIHsKKwkJJHRoaXMtPmZ1bmMgPSBmdW5jdGlvbigpIHsKKwkJCWVjaG8g X19NRVRIT0RfXyAuICIoKVxuIjsKKwkJfTsKKwl9Cit9CisKKyRvID0gbmV3IFRlc3Q7CitS ZWZsZWN0aW9uUHJvcGVydHk6OmV4cG9ydCgkbywgJ2Z1bmMnKTsKK3Zhcl9kdW1wKCRvLT5m dW5jKTsKKyRmID0gJG8tPmZ1bmM7CiskZigpOworJG8tPmZ1bmMoKTsKKworPz4KKz09PURP TkU9PT0KKy0tRVhQRUNURi0tCitQcm9wZXJ0eSBbIDxkZWZhdWx0PiBwdWJsaWMgJGZ1bmMg XQorCitvYmplY3QoQ2xvc3VyZSkjJWQgKDEpIHsKKyAgWyJ0aGlzIl09PgorICBvYmplY3Qo VGVzdCkjJWQgKDEpIHsKKyAgICBbdSJmdW5jIl09PgorICAgIG9iamVjdChDbG9zdXJlKSMl ZCAoMSkgeworICAgICAgWyJ0aGlzIl09PgorICAgICAgb2JqZWN0KFRlc3QpIyVkICgxKSB7 CisgICAgICAgIFt1ImZ1bmMiXT0+CisgICAgICAgIG9iamVjdChDbG9zdXJlKSMlZCAoMSkg eworICAgICAgICAgIFsidGhpcyJdPT4KKyAgICAgICAgICAqUkVDVVJTSU9OKgorICAgICAg ICB9CisgICAgICB9CisgICAgfQorICB9Cit9CitUZXN0Ojp7Y2xvc3VyZX0oKQorVGVzdDo6 e2Nsb3N1cmV9KCkKKz09PURPTkU9PT0KSW5kZXg6IFplbmQvdGVzdHMvY2xvc3VyZV9wcm9w ZXJ0eV8wMDMucGhwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBaZW5kL3Rlc3RzL2Nsb3N1 cmVfcHJvcGVydHlfMDAzLnBocHQKZGlmZiAtTiBaZW5kL3Rlc3RzL2Nsb3N1cmVfcHJvcGVy dHlfMDAzLnBocHQKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisr KyBaZW5kL3Rlc3RzL2Nsb3N1cmVfcHJvcGVydHlfMDAzLnBocHQJMyBKYW4gMjAwOSAxNzo1 MTowOSAtMDAwMApAQCAtMCwwICsxLDQ4IEBACistLVRFU1QtLQorQ2xvc3VyZSBwcm9wZXJ0 eSAwMDM6IENhbGxpbmcgcHJvcGVydHkgc3VwcG9ydGluZyBfX2ludm9rZQorLS1JTkktLQor ZGF0ZS50aW1lem9uZT1VVEMKKy0tRklMRS0tCis8P3BocAorCitjbGFzcyBDdXJyeQorewor ICBwcm90ZWN0ZWQgJGNhbGxhYmxlOworICBwcm90ZWN0ZWQgJGFyZ3M7CisKKyAgcHVibGlj IHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoJGNhbGxhYmxlKQorICB7CisgICAgJGN1cnJ5ID0g bmV3IHNlbGYoJGNhbGxhYmxlLCBhcnJheV9zbGljZShmdW5jX2dldF9hcmdzKCksIDEpKTsK KyAgICByZXR1cm4gJGN1cnJ5OworICB9CisKKyAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9fY29u c3RydWN0KCRjYWxsYWJsZSwgJGFyZ3MpCisgIHsKKyAgICAkdGhpcy0+Y2FsbGFibGUgPSAk Y2FsbGFibGU7CisgICAgJHRoaXMtPmFyZ3MgPSAkYXJnczsKKyAgfQorCisgIHB1YmxpYyBm dW5jdGlvbiBfX2ludm9rZSgpCisgIHsKKyAgICByZXR1cm4gY2FsbF91c2VyX2Z1bmNfYXJy YXkoJHRoaXMtPmNhbGxhYmxlLCBhcnJheV9tZXJnZSgkdGhpcy0+YXJncywgZnVuY19nZXRf YXJncygpKSk7CisgIH0KK30KKworJGQgPSBuZXcgRGF0ZVRpbWUoKTsKKyRnZXRBdG9tID0g Q3Vycnk6OmNyZWF0ZShhcnJheSgkZCwgJ2Zvcm1hdCcpLCBEQVRFX0FUT00pOwordmFyX2R1 bXAoaXNfQ2FsbGFibGUoJGdldEF0b20pKTsKK3Zhcl9kdW1wKCRnZXRBdG9tKCkpOworCisk ZCA9IG5ldyBEYXRlVGltZSgpOworJGQtPmdldEF0b20gPSBDdXJyeTo6Y3JlYXRlKGFycmF5 KCRkLCAnZm9ybWF0JyksIERBVEVfQVRPTSk7Cit2YXJfZHVtcChpc19DYWxsYWJsZSgkZC0+ Z2V0QXRvbSkpOwordmFyX2R1bXAoJGQtPmdldEF0b20oKSk7CisKKz8+Cis9PT1ET05FPT09 CistLUVYUEVDVEYtLQorYm9vbCh0cnVlKQordW5pY29kZSglZCkgIjIlZC0lZC0lZFQlZDol ZDolZCVzIgorYm9vbCh0cnVlKQordW5pY29kZSglZCkgIjIlZC0lZC0lZFQlZDolZDolZCVz IgorPT09RE9ORT09PQpJbmRleDogWmVuZC90ZXN0cy9jbG9zdXJlX3Byb3BlcnR5XzAwNC5w aHB0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IFplbmQvdGVzdHMvY2xvc3VyZV9wcm9wZXJ0 eV8wMDQucGhwdApkaWZmIC1OIFplbmQvdGVzdHMvY2xvc3VyZV9wcm9wZXJ0eV8wMDQucGhw dAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIFplbmQvdGVz dHMvY2xvc3VyZV9wcm9wZXJ0eV8wMDQucGhwdAkzIEphbiAyMDA5IDE3OjUxOjA5IC0wMDAw CkBAIC0wLDAgKzEsNDMgQEAKKy0tVEVTVC0tCitDbG9zdXJlIHByb3BlcnR5IDAwNDogQ2Fs bGluZyBkeW5hbWljIHByb3BlcnR5IENsb3N1cmUgKG5vdCBzdXBwb3J0ZWQpCistLUZJTEUt LQorPD9waHAKKworY2xhc3MgVGVzdCB7CisJcHVibGljICRtZXRob2RzID0gYXJyYXkoKTsK KwlmdW5jdGlvbiBfX2lzc2V0KCRuYW1lKSB7CisJCWVjaG8gX19NRVRIT0RfXyAuICIoJG5h bWUpXG4iOworCQlyZXR1cm4gaXNzZXQoJHRoaXMtPm1ldGhvZHNbJG5hbWVdKTsKKwl9CisJ ZnVuY3Rpb24gX19nZXQoJG5hbWUpIHsKKwkJZWNobyBfX01FVEhPRF9fIC4gIigkbmFtZSlc biI7CisJCXJldHVybiAkdGhpcy0+bWV0aG9kc1skbmFtZV07CisJfQorCWZ1bmN0aW9uIF9f c2V0KCRuYW1lLCAkZGF0YSkgeworCQllY2hvIF9fTUVUSE9EX18gLiAiKCRuYW1lKVxuIjsK KwkJJHRoaXMtPm1ldGhvZHNbJG5hbWVdID0gJGRhdGE7CisJfQorCWZ1bmN0aW9uIF9fdG9T dHJpbmcoKSB7CisJCXJldHVybiBfX0NMQVNTX187CisJfQorfQorCiskbyA9IG5ldyBUZXN0 OwordmFyX2R1bXAoaXNzZXQoJG8tPmZ1bmMpKTsKKyRvLT5mdW5jID0gZnVuY3Rpb24oKSB7 CisJZWNobyBfX01FVEhPRF9fIC4gIigiIC4gdmFyX2V4cG9ydCgkdGhpcywgdHJ1ZSkgLiAi KVxuIjsKK307Cit2YXJfZHVtcChpc3NldCgkby0+ZnVuYykpOworJG8tPmZ1bmMoKTsKK3Zh cl9kdW1wKCRvLT5mdW5jKTsKKworPz4KKz09PURPTkU9PT0KKy0tRVhQRUNURi0tCitUZXN0 OjpfX2lzc2V0KGZ1bmMpCitib29sKGZhbHNlKQorVGVzdDo6X19zZXQoZnVuYykKK1Rlc3Q6 Ol9faXNzZXQoZnVuYykKK2Jvb2wodHJ1ZSkKKworRmF0YWwgZXJyb3I6IENhbGwgdG8gdW5k ZWZpbmVkIG1ldGhvZCBUZXN0OjpmdW5jKCkgaW4gJXNjbG9zdXJlX3Byb3BlcnR5XzAwNC5w aHAgb24gbGluZSAlZApJbmRleDogWmVuZC90ZXN0cy9jbG9zdXJlX3Byb3BlcnR5XzAwNS5w aHB0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IFplbmQvdGVzdHMvY2xvc3VyZV9wcm9wZXJ0 eV8wMDUucGhwdApkaWZmIC1OIFplbmQvdGVzdHMvY2xvc3VyZV9wcm9wZXJ0eV8wMDUucGhw dAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIFplbmQvdGVz dHMvY2xvc3VyZV9wcm9wZXJ0eV8wMDUucGhwdAkzIEphbiAyMDA5IDE3OjUxOjA5IC0wMDAw CkBAIC0wLDAgKzEsMzEgQEAKKy0tVEVTVC0tCitDbG9zdXJlIHByb3BlcnR5IDAwNTogQ2Fs bGluZyBjbG9zdXJlIHByb3BlcnR5IHZpYSB2YXJpYWJsZQorLS1GSUxFLS0KKzw/cGhwCisK K2NsYXNzIFRlc3QgeworCXB1YmxpYyAkZnVuYzE7CisJZnVuY3Rpb24gX19jb25zdHJ1Y3Qo KSB7CisJCSR0aGlzLT5mdW5jMSA9IGZ1bmN0aW9uKCkgeworCQkJZWNobyBfX01FVEhPRF9f IC4gIigpXG4iOworCQl9OworCX0KK30KKworJG8gPSBuZXcgVGVzdDsKKyRuID0gJ2Z1bmMx JzsKKyRvLT4kbigpOworCiskby0+ZnVuYzIgPSBmdW5jdGlvbigpIHsKKwllY2hvIF9fTUVU SE9EX18gLiAiKClcbiI7Cit9OworCiskbiA9ICdmdW5jMic7Ciskby0+JG4oKTsKKworPz4K Kz09PURPTkU9PT0KKy0tRVhQRUNURi0tCitUZXN0Ojp7Y2xvc3VyZX0oKQore2Nsb3N1cmV9 KCkKKz09PURPTkU9PT0K ------------2396ED26A5E25A--