View mm.patch
diff --git a/src/gdhelpers.c b/src/gdhelpers.c
index 20fff5c..a64278b 100644
--- a/src/gdhelpers.c
+++ b/src/gdhelpers.c
@@ -14,6 +14,33 @@
#define SEP_TEST (separators[*((unsigned char *) s)])
+static inline void* gd_malloc_wrapper(size_t size)
View variance-correct-probably.patch
diff --git a/Zend/tests/object_types/variance_in_param.phpt b/Zend/tests/object_types/variance_in_param.phpt
index bcc528e..cf28dd8 100644
--- a/Zend/tests/object_types/variance_in_param.phpt
+++ b/Zend/tests/object_types/variance_in_param.phpt
@@ -15,6 +15,7 @@ class Bar extends Foo {
var_dump(new Bar);
+Warning: Declaration of Bar::qux(Qux $qux) should be compatible with Foo::qux(object $object) in %s on line 10
object(Bar)#%d (0) {
View starfield.d
import std.random;
import andlabs.libui;
struct Star {
double X;
double Y;
double V;
bool F;
double G;


Build Status

This extension wraps the very excellent libui to provide PHP 7 with an API for the creation of cross platform native look-and-feel interfaces.


  • queue for pthreads
View starfield.php
use UI\App;
use UI\Window;
use UI\Point;
use UI\Size;
use UI\Area;
use UI\Controls\Box;
use UI\Draw\Pen;
use UI\Draw\Brush;
use UI\Draw\Path;
View prop_access.out
krakjoe@fiji:/usr/src/php-src$ sapi/cli/php -n prop.php
empty_loop 0.060
write_prop1() 0.085 0.025
write_prop2() 0.070 0.010
write_prop3() 0.058 -0.002
Total 0.274
krakjoe@fiji:/usr/src/php-src$ sapi/cli/php -n prop.php
empty_loop 0.059
write_prop1() 0.086 0.027
View datetimeabstract.patch
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index 2f52353..930c9f1 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -326,7 +326,7 @@ ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_timezone_offset_get, 0, 0, 2)
ZEND_ARG_OBJ_INFO(0, object, DateTimeZone, 0)
- ZEND_ARG_OBJ_INFO(0, datetime, DateTimeInterface, 0)
+ ZEND_ARG_OBJ_INFO(0, datetime, DateTimeAbstract, 0)
View phpdbg.txt
> It's just terrible to use the opcodes could be hidden, maybe toggle with a verbosity level flag e.g -v2.
They are hidden by default, you are shown opcodes when it's appropriate to show you opcodes or on request, if there's a bug, please report it.
> It's not smooth like pdb in python - having to 'eval' everything doesnt feel right.
You appear to be complaining that this isn't like some other software you have used, I'm not sure what to do with that.
Having to eval everything makes sense from the perspective that not all input is code, this is not a REPL, this is a debugger. What for example do we do with the input "run" if there is a run constant defined !? The answer is; nothing that makes sense in all situations. What does make sense, is eval'ing code.

Easy pthreads Pools

The final solution !!

Since the first version of pthreads, PHP has had the ability to initialize Worker threads for users. Onto those Worker threads are stacked objects of class Stackable for execution concurrently.

The objects stacked onto workers do not have their reference counts changed, pthreads forces the user to maintain the reference counts in userland, for the extremely good reason that this enables the programmer to keep control of memory usage; and so, execute indefinitely.

This is the cause of much heartache for newcomers to pthreads; if you do not maintain references properly you will, definitely, experience segmentation faults.


This is a rather extreme test ... still, was fun ...

[joe@fiji pthreads]$ time php-zts ../php-src/mandrel.php 0 128

real	0m11.441s
user	0m11.386s
sys	0m0.043s
[joe@fiji pthreads]$ time php-zts ../php-src/mandrel.php 1 128