Support yield return polyfill
This commit is contained in:
parent
fadf967e6a
commit
69a2131206
@ -56,7 +56,8 @@
|
|||||||
"src/Worker.php",
|
"src/Worker.php",
|
||||||
"src/Pool.php",
|
"src/Pool.php",
|
||||||
"src/HttpProxy.php",
|
"src/HttpProxy.php",
|
||||||
"src/SocksProxy.php"
|
"src/SocksProxy.php",
|
||||||
|
"src/YieldReturnValue.php"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
30
src/YieldReturnValue.php
Normal file
30
src/YieldReturnValue.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Yield return value PHP5 polyfill.
|
||||||
|
*
|
||||||
|
* This file is part of MadelineProto.
|
||||||
|
* MadelineProto is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||||
|
* MadelineProto is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
* See the GNU Affero General Public License for more details.
|
||||||
|
* You should have received a copy of the GNU General Public License along with MadelineProto.
|
||||||
|
* If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* @author Daniil Gentili <daniil@daniil.it>
|
||||||
|
* @copyright 2016-2018 Daniil Gentili <daniil@daniil.it>
|
||||||
|
* @license https://opensource.org/licenses/AGPL-3.0 AGPLv3
|
||||||
|
*
|
||||||
|
* @link https://docs.madelineproto.xyz MadelineProto documentation
|
||||||
|
*/
|
||||||
|
|
||||||
|
class YieldReturnValue
|
||||||
|
{
|
||||||
|
private $value;
|
||||||
|
public function __construct($value)
|
||||||
|
{
|
||||||
|
$this->value = $value;
|
||||||
|
}
|
||||||
|
public function getReturn()
|
||||||
|
{
|
||||||
|
return $this->value;
|
||||||
|
}
|
||||||
|
}
|
@ -34,6 +34,8 @@ use Amp\Internal;
|
|||||||
use Amp\Promise;
|
use Amp\Promise;
|
||||||
use Amp\Success;
|
use Amp\Success;
|
||||||
|
|
||||||
|
use React\Promise\PromiseInterface as ReactPromise;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a promise from a generator function yielding promises.
|
* Creates a promise from a generator function yielding promises.
|
||||||
*
|
*
|
||||||
@ -65,8 +67,18 @@ final class Coroutine implements Promise
|
|||||||
try {
|
try {
|
||||||
$yielded = $this->generator->current();
|
$yielded = $this->generator->current();
|
||||||
if (!$yielded instanceof Promise) {
|
if (!$yielded instanceof Promise) {
|
||||||
|
if ($yielded instanceof \YieldReturnValue) {
|
||||||
|
$this->resolve($yielded->getReturn());
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (!$this->generator->valid()) {
|
if (!$this->generator->valid()) {
|
||||||
$this->resolve($this->generator->getReturn());
|
if (method_exists($this->generator, 'getReturn')) {
|
||||||
|
$this->resolve($this->generator->getReturn());
|
||||||
|
} else {
|
||||||
|
$this->resolve(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -100,8 +112,19 @@ final class Coroutine implements Promise
|
|||||||
$yielded = $this->generator->send($this->value);
|
$yielded = $this->generator->send($this->value);
|
||||||
}
|
}
|
||||||
if (!$yielded instanceof Promise) {
|
if (!$yielded instanceof Promise) {
|
||||||
|
if ($yielded instanceof \YieldReturnValue) {
|
||||||
|
$this->resolve($yielded->getReturn());
|
||||||
|
$this->onResolve = null;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!$this->generator->valid()) {
|
if (!$this->generator->valid()) {
|
||||||
$this->resolve($this->generator->getReturn());
|
if (method_exists($this->generator, 'getReturn')) {
|
||||||
|
$this->resolve($this->generator->getReturn());
|
||||||
|
} else {
|
||||||
|
$this->resolve(null);
|
||||||
|
}
|
||||||
$this->onResolve = null;
|
$this->onResolve = null;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -146,6 +169,10 @@ final class Coroutine implements Promise
|
|||||||
if ($yielded instanceof \Generator) {
|
if ($yielded instanceof \Generator) {
|
||||||
return new self($yielded);
|
return new self($yielded);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($yielded instanceof ReactPromise) {
|
||||||
|
return Promise\adapt($yielded);
|
||||||
|
}
|
||||||
// No match, continue to returning Failure below.
|
// No match, continue to returning Failure below.
|
||||||
} catch (\Throwable $exception) {
|
} catch (\Throwable $exception) {
|
||||||
// Conversion to promise failed, fall-through to returning Failure below.
|
// Conversion to promise failed, fall-through to returning Failure below.
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash -e
|
#!/bin/bash -e
|
||||||
|
|
||||||
#composer global require spatie/7to5 dev-master#7b3e0f4254aadd81cf1a7ef2ddad68d5fcdadcc1
|
composer global require spatie/7to5 dev-master#171ed9b96940f12cb348ffd11f9be4f596bb0146
|
||||||
|
|
||||||
[ -f $HOME/.composer/vendor/bin/php7to5 ] && php7to5=$HOME/.composer/vendor/bin/php7to5
|
[ -f $HOME/.composer/vendor/bin/php7to5 ] && php7to5=$HOME/.composer/vendor/bin/php7to5
|
||||||
[ -f $HOME/.config/composer/vendor/bin/php7to5 ] && php7to5=$HOME/.config/composer/vendor/bin/php7to5
|
[ -f $HOME/.config/composer/vendor/bin/php7to5 ] && php7to5=$HOME/.config/composer/vendor/bin/php7to5
|
||||||
@ -35,11 +35,14 @@ composer update
|
|||||||
cp -a ../src vendor/danog/madelineproto
|
cp -a ../src vendor/danog/madelineproto
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
cp -a phar7 phar5
|
#cp -a phar7 phar5
|
||||||
#$php7to5 convert --copy-all phar7 phar5 >/dev/null
|
$php7to5 convert --copy-all phar7 phar5 >/dev/null
|
||||||
find phar5 -type f -exec sed 's/\w* \.\.\./.../' -i {} +
|
find phar5 -type f -exec sed 's/\w* \.\.\./.../' -i {} +
|
||||||
#sed 's/^Loop::set.*;//g' -i phar5/vendor/amphp/amp/lib/Loop.php
|
sed 's/^Loop::set.*;//g' -i phar5/vendor/amphp/amp/lib/Loop.php
|
||||||
#echo 'Loop::set((new DriverFactory())->create());' >> phar5/vendor/amphp/amp/lib/Loop.php
|
echo 'Loop::set((new DriverFactory())->create());' >> phar5/vendor/amphp/amp/lib/Loop.php
|
||||||
|
cp phar5/vendor/danog/madelineproto/src/danog/MadelineProto/Coroutine.php phar5/vendor/amphp/amp/lib/
|
||||||
|
sed -i 's/namespace danog\\MadelineProto;//g' phar5/vendor/amphp/amp/lib/Coroutine.php
|
||||||
|
|
||||||
|
|
||||||
php makephar.php phar5 madeline.phar $(cat .git/refs/heads/master)
|
php makephar.php phar5 madeline.phar $(cat .git/refs/heads/master)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user