Merge pull request #1455 from ojwb/php-7.3-support

PHP 7.3 support
This commit is contained in:
Olly Betts 2019-02-08 17:14:20 +13:00 • committed by GitHub
commit 1a17496598
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
53 changed files with 150 additions and 134 deletions

View file

@ -134,6 +134,16 @@ matrix:
env: SWIGLANG=php VER=7.1 env: SWIGLANG=php VER=7.1
sudo: required sudo: required
dist: trusty dist: trusty
- compiler: gcc
os: linux
env: SWIGLANG=php VER=7.2
sudo: required
dist: trusty
- compiler: gcc
os: linux
env: SWIGLANG=php VER=7.3
sudo: required
dist: trusty
- compiler: gcc - compiler: gcc
os: linux os: linux
env: SWIGLANG=python # 2.7 env: SWIGLANG=python # 2.7

View file

@ -7,6 +7,10 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
Version 4.0.0 (in progress) Version 4.0.0 (in progress)
=========================== ===========================
2019-02-08: olly
[PHP] The generated code is now compatible with PHP 7.3, and the
testsuite now runs cleanly with this version too.
2019-02-04: wsfulton 2019-02-04: wsfulton
[CFFI] #1447 Common Lisp CFFI has been disabled as a target language in SWIG as part of a [CFFI] #1447 Common Lisp CFFI has been disabled as a target language in SWIG as part of a
clean up to remove target languages that have been neglected/not functional. clean up to remove target languages that have been neglected/not functional.

View file

@ -12,16 +12,12 @@ print "EXPR = " . EXPR . " (should be 48.5484)\n";
print "iconst = " . iconst . " (should be 37)\n"; print "iconst = " . iconst . " (should be 37)\n";
print "fconst = " . fconst . " (should be 3.14)\n"; print "fconst = " . fconst . " (should be 3.14)\n";
if (EXTERN!="EXTERN") { $c = get_defined_constants();
print "EXTERN = " . EXTERN . " (Arg! This shouldn't print anything)\n"; if (array_key_exists("EXTERN", $c)) {
} else { print "EXTERN = " . $c["EXTERN"] . " (Arg! This shouldn't print anything)\n";
print "EXTERN defaults to 'EXTERN', it probably isn't defined (good)\n";
} }
if (array_key_exists("FOO", $c)) {
if (FOO!="FOO") { print "FOO = " . $c["FOO"] . " (Arg! This shouldn't print anything)\n";
print "FOO = " . FOO . "(Arg! This shouldn't print anything)\n";
} else {
print "FOO defaults to 'FOO', it probably isn't defined (good)\n";
} }

View file

@ -3,7 +3,7 @@
require "tests.php"; require "tests.php";
require "abstract_inherit_ok.php"; require "abstract_inherit_ok.php";
check::classes(array(Foo,Spam)); check::classes(array('Foo','Spam'));
$spam=new Spam(); $spam=new Spam();
check::equal(0,$spam->blah(),"spam object method"); check::equal(0,$spam->blah(),"spam object method");

View file

@ -3,7 +3,7 @@
require "tests.php"; require "tests.php";
require "abstract_inherit.php"; require "abstract_inherit.php";
check::classes(array(Foo,Bar,Spam,NRFilter_i,NRRCFilter_i,NRRCFilterpro_i,NRRCFilterpri_i)); check::classes(array('Foo','Bar','Spam','NRFilter_i','NRRCFilter_i','NRRCFilterpro_i','NRRCFilterpri_i'));
// This constructor attempt should fail as there isn't one // This constructor attempt should fail as there isn't one
//$spam=new Spam(); //$spam=new Spam();

View file

@ -4,15 +4,15 @@ require "tests.php";
require "add_link.php"; require "add_link.php";
// No new functions, except the flat functions // No new functions, except the flat functions
check::functions(array(new_foo,foo_blah)); check::functions(array('new_foo','foo_blah'));
check::classes(array(Foo)); check::classes(array('Foo'));
$foo=new foo(); $foo=new foo();
check::is_a($foo,foo); check::is_a($foo,'foo');
$foo_blah=$foo->blah(); $foo_blah=$foo->blah();
check::is_a($foo_blah,foo); check::is_a($foo_blah,'foo');
//fails, can't be called as a class method, should allow and make it nil? //fails, can't be called as a class method, should allow and make it nil?
//$class_foo_blah=foo::blah(); //$class_foo_blah=foo::blah();

View file

@ -3,7 +3,7 @@
require "tests.php"; require "tests.php";
require "argout.php"; require "argout.php";
check::functions(array(incp,incr,inctr,new_intp,copy_intp,delete_intp,intp_assign,intp_value,voidhandle,handle)); check::functions(array('incp','incr','inctr','new_intp','copy_intp','delete_intp','intp_assign','intp_value','voidhandle','handle'));
$ip=copy_intp(42); $ip=copy_intp(42);
check::equal(42,incp($ip),"42==incp($ip)"); check::equal(42,incp($ip),"42==incp($ip)");

View file

@ -4,7 +4,7 @@ require "tests.php";
require "arrayptr.php"; require "arrayptr.php";
// No new functions // No new functions
check::functions(array(foo)); check::functions(array('foo'));
// No new classes // No new classes
check::classes(array()); check::classes(array());
// now new vars // now new vars

View file

@ -3,17 +3,17 @@
require "tests.php"; require "tests.php";
require "arrays_global.php"; require "arrays_global.php";
check::functions(array(test_a,test_b,new_simplestruct,new_material)); check::functions(array('test_a','test_b','new_simplestruct','new_material'));
check::classes(array(arrays_global,SimpleStruct,Material)); check::classes(array('arrays_global','SimpleStruct','Material'));
check::globals(array(array_c,array_sc,array_uc,array_s,array_us,array_i,array_ui,array_l,array_ul,array_ll,array_f,array_d,array_struct,array_structpointers,array_ipointers,array_enum,array_enumpointers,array_const_i,beginstring_fix44a,beginstring_fix44b,beginstring_fix44c,beginstring_fix44d,beginstring_fix44e,beginstring_fix44f,chitmat,hitmat_val,hitmat,simplestruct_double_field)); check::globals(array('array_c','array_sc','array_uc','array_s','array_us','array_i','array_ui','array_l','array_ul','array_ll','array_f','array_d','array_struct','array_structpointers','array_ipointers','array_enum','array_enumpointers','array_const_i','beginstring_fix44a','beginstring_fix44b','beginstring_fix44c','beginstring_fix44d','beginstring_fix44e','beginstring_fix44f','chitmat','hitmat_val','hitmat','simplestruct_double_field'));
// The size of array_c is 2, but the last byte is \0, so we can only store a // The size of array_c is 2, but the last byte is \0, so we can only store a
// single byte string in it. // single byte string in it.
check::set(array_c,"Z"); check::set("array_c","Z");
check::equal("Z",check::get(array_c),"set array_c"); check::equal("Z",check::get("array_c"),"set array_c");
check::set(array_c,"xy"); check::set("array_c","xy");
check::equal("x",check::get(array_c),"set array_c"); check::equal("x",check::get("array_c"),"set array_c");
check::set(array_c,"h"); check::set("array_c","h");
check::equal("h",check::get(array_c),"set array_c"); check::equal("h",check::get("array_c"),"set array_c");
check::done(); check::done();
?> ?>

View file

@ -3,14 +3,14 @@
require "tests.php"; require "tests.php";
require "arrays_global_twodim.php"; require "arrays_global_twodim.php";
check::functions(array(fn_taking_arrays,get_2d_array,new_simplestruct,new_material)); check::functions(array('fn_taking_arrays','get_2d_array','new_simplestruct','new_material'));
check::classes(array(arrays_global_twodim,SimpleStruct,Material)); check::classes(array('arrays_global_twodim','SimpleStruct','Material'));
check::globals(array(array_c,array_sc,array_uc,array_s,array_us,array_i,array_ui,array_l,array_ul,array_ll,array_f,array_d,array_struct,array_structpointers,array_ipointers,array_enum,array_enumpointers,array_const_i,chitmat,hitmat_val,hitmat,simplestruct_double_field)); check::globals(array('array_c','array_sc','array_uc','array_s','array_us','array_i','array_ui','array_l','array_ul','array_ll','array_f','array_d','array_struct','array_structpointers','array_ipointers','array_enum','array_enumpointers','array_const_i','chitmat','hitmat_val','hitmat','simplestruct_double_field'));
$a1=array(10,11,12,13); $a1=array(10,11,12,13);
$a2=array(14,15,16,17); $a2=array(14,15,16,17);
$a=array($a1,$a2); $a=array($a1,$a2);
$_a=check::get(array_const_i); $_a=check::get('array_const_i');
for($x=0;$x<count($a1);$x++) { for($x=0;$x<count($a1);$x++) {
for($y=0;$y<2;$y++) { for($y=0;$y<2;$y++) {

View file

@ -2,9 +2,9 @@
require "tests.php"; require "tests.php";
require "arrays.php"; require "arrays.php";
check::functions(array(fn_taking_arrays,newintpointer,setintfrompointer,getintfrompointer,array_pointer_func)); check::functions(array('fn_taking_arrays','newintpointer','setintfrompointer','getintfrompointer','array_pointer_func'));
check::classes(array(arrays,SimpleStruct,ArrayStruct,CartPoseData_t)); check::classes(array('arrays','SimpleStruct','ArrayStruct','CartPoseData_t'));
check::globals(array(simplestruct_double_field,arraystruct_array_c,arraystruct_array_sc,arraystruct_array_uc,arraystruct_array_s,arraystruct_array_us,arraystruct_array_i,arraystruct_array_ui,arraystruct_array_l,arraystruct_array_ul,arraystruct_array_ll,arraystruct_array_f,arraystruct_array_d,arraystruct_array_struct,arraystruct_array_structpointers,arraystruct_array_ipointers,arraystruct_array_enum,arraystruct_array_enumpointers,arraystruct_array_const_i,cartposedata_t_p)); check::globals(array('simplestruct_double_field','arraystruct_array_c','arraystruct_array_sc','arraystruct_array_uc','arraystruct_array_s','arraystruct_array_us','arraystruct_array_i','arraystruct_array_ui','arraystruct_array_l','arraystruct_array_ul','arraystruct_array_ll','arraystruct_array_f','arraystruct_array_d','arraystruct_array_struct','arraystruct_array_structpointers','arraystruct_array_ipointers','arraystruct_array_enum','arraystruct_array_enumpointers','arraystruct_array_const_i','cartposedata_t_p'));
$ss=new simplestruct(); $ss=new simplestruct();
check::classname(simplestruct,$ss); check::classname(simplestruct,$ss);

View file

@ -4,11 +4,11 @@ require "tests.php";
require "arrays_scope.php"; require "arrays_scope.php";
// New functions // New functions
check::functions(array(new_bar,bar_blah)); check::functions(array('new_bar','bar_blah'));
// New classes // New classes
check::classes(array(arrays_scope,Bar)); check::classes(array('arrays_scope','Bar'));
// New vars // New vars
check::globals(array(bar_adata,bar_bdata,bar_cdata)); check::globals(array('bar_adata','bar_bdata','bar_cdata'));
$bar=new bar(); $bar=new bar();

View file

@ -4,13 +4,13 @@ require "tests.php";
require "casts.php"; require "casts.php";
// No new functions // No new functions
check::functions(array(new_a,a_hello,new_b)); check::functions(array('new_a','a_hello','new_b'));
// No new classes // No new classes
check::classes(array(A,B)); check::classes(array('A','B'));
// now new vars // now new vars
check::globals(array()); check::globals(array());
# Make sure $b inherites hello() from class A # Make sure $b inherits hello() from class A
$b=new B(); $b=new B();
$b->hello(); $b->hello();

View file

@ -3,8 +3,8 @@
require "tests.php"; require "tests.php";
require "class_ignore.php"; require "class_ignore.php";
check::functions(array(do_blah,new_bar,bar_blah,new_boo,boo_away,new_far,new_hoo)); check::functions(array('do_blah','new_bar','bar_blah','new_boo','boo_away','new_far','new_hoo'));
check::classes(array(class_ignore,Bar,Boo,Far,Hoo)); check::classes(array('class_ignore','Bar','Boo','Far','Hoo'));
// No new vars // No new vars
check::globals(array()); check::globals(array());

View file

@ -4,11 +4,11 @@ require "tests.php";
require "cpp_basic.php"; require "cpp_basic.php";
// New functions // New functions
check::functions(array(foo_func1,foo_func2,foo___str__,foosubsub___str__,bar_test,bar_testfoo,get_func1_ptr,get_func2_ptr,test_func_ptr,fl_window_show)); check::functions(array('foo_func1','foo_func2','foo___str__','foosubsub___str__','bar_test','bar_testfoo','get_func1_ptr','get_func2_ptr','test_func_ptr','fl_window_show'));
// New classes // New classes
check::classes(array(cpp_basic,Foo,FooSub,FooSubSub,Bar,Fl_Window)); check::classes(array('cpp_basic','Foo','FooSub','FooSubSub','Bar','Fl_Window'));
// New vars // New vars
check::globals(array(foo_num,foo_func_ptr,bar_fptr,bar_fref,bar_fval,bar_cint,bar_global_fptr,bar_global_fref,bar_global_fval)); check::globals(array('foo_num','foo_func_ptr','bar_fptr','bar_fref','bar_fval','bar_cint','bar_global_fptr','bar_global_fref','bar_global_fval'));
$f = new Foo(3); $f = new Foo(3);
$f->func_ptr = get_func1_ptr(); $f->func_ptr = get_func1_ptr();

View file

@ -4,11 +4,11 @@ require "tests.php";
require "cpp_static.php"; require "cpp_static.php";
// New functions // New functions
check::functions(array(staticfunctiontest_static_func,staticfunctiontest_static_func_2,staticfunctiontest_static_func_3,is_python_builtin)); check::functions(array('staticfunctiontest_static_func','staticfunctiontest_static_func_2','staticfunctiontest_static_func_3','is_python_builtin'));
// New classes // New classes
check::classes(array(StaticMemberTest,StaticFunctionTest,cpp_static,StaticBase,StaticDerived)); check::classes(array('StaticMemberTest','StaticFunctionTest','cpp_static','StaticBase','StaticDerived'));
// New vars // New vars
check::globals(array(staticmembertest_static_int,staticbase_statty,staticderived_statty)); check::globals(array('staticmembertest_static_int','staticbase_statty','staticderived_statty'));
check::done(); check::done();
?> ?>

View file

@ -4,9 +4,9 @@ require "tests.php";
require "director_abstract.php"; require "director_abstract.php";
// No new functions // No new functions
check::functions(array(foo_ping,foo_pong,example0_getxsize,example0_color,example0_get_color,example1_getxsize,example1_color,example1_get_color,example2_getxsize,example2_color,example2_get_color,example4_getxsize,example4_color,example4_get_color,example3_i_color,example3_i_get_color,g,a_f)); check::functions(array('foo_ping','foo_pong','example0_getxsize','example0_color','example0_get_color','example1_getxsize','example1_color','example1_get_color','example2_getxsize','example2_color','example2_get_color','example4_getxsize','example4_color','example4_get_color','example3_i_color','example3_i_get_color','g','a_f'));
// No new classes // No new classes
check::classes(array(director_abstract,Foo,Example0,Example1,Example2,Example4,Example3_i,A)); check::classes(array('director_abstract','Foo','Example0','Example1','Example2','Example4','Example3_i','A'));
// now new vars // now new vars
check::globals(array()); check::globals(array());

View file

@ -4,11 +4,11 @@ require "tests.php";
require "director_basic.php"; require "director_basic.php";
// No new functions // No new functions
check::functions(array(foo_ping,foo_pong,foo_get_self,a_f,a_rg,a1_ff,myclass_method,myclass_vmethod,myclass_pmethod,myclass_cmethod,myclass_get_self,myclass_call_pmethod,myclasst_i_method,myclass_nonvirtual,myclass_nonoverride,myclass_call_nonvirtual,myclass_call_nonoverride,myclass_connect)); check::functions(array('foo_ping','foo_pong','foo_get_self','a_f','a_rg','a1_ff','myclass_method','myclass_vmethod','myclass_pmethod','myclass_cmethod','myclass_get_self','myclass_call_pmethod','myclasst_i_method','myclass_nonvirtual','myclass_nonoverride','myclass_call_nonvirtual','myclass_call_nonoverride','myclass_connect'));
// No new classes // No new classes
check::classes(array(Foo,A,A1,Bar,MyClass,MyClassT_i)); check::classes(array('Foo','A','A1','Bar','MyClass','MyClassT_i'));
// now new vars // now new vars
check::globals(array(bar_x)); check::globals(array('bar_x'));
class PhpFoo extends Foo { class PhpFoo extends Foo {
function ping() { function ping() {

View file

@ -4,9 +4,9 @@ require "tests.php";
require "director_classic.php"; require "director_classic.php";
// No new functions // No new functions
check::functions(array(being_id,person_id,child_id,grandchild_id,caller_delcallback,caller_setcallback,caller_resetcallback,caller_call,caller_baseclass)); check::functions(array('being_id','person_id','child_id','grandchild_id','caller_delcallback','caller_setcallback','caller_resetcallback','caller_call','caller_baseclass'));
// No new classes // No new classes
check::classes(array(Being,Person,Child,GrandChild,OrphanPerson,OrphanChild,Caller)); check::classes(array('Being','Person','Child','GrandChild','OrphanPerson','OrphanChild','Caller'));
// now new vars // now new vars
check::globals(array()); check::globals(array());

View file

@ -4,9 +4,9 @@ require "tests.php";
require "director_default.php"; require "director_default.php";
// No new functions // No new functions
check::functions(array(foo_msg,foo_getmsg,bar_msg,bar_getmsg,defaultsbase_defaultargs,defaultsderived_defaultargs)); check::functions(array('foo_msg','foo_getmsg','bar_msg','bar_getmsg','defaultsbase_defaultargs','defaultsderived_defaultargs'));
// No new classes // No new classes
check::classes(array(Foo,Bar,DefaultsBase,DefaultsDerived)); check::classes(array('Foo','Bar','DefaultsBase','DefaultsDerived'));
// now new vars // now new vars
check::globals(array()); check::globals(array());

View file

@ -4,9 +4,9 @@ require "tests.php";
require "director_detect.php"; require "director_detect.php";
// No new functions // No new functions
check::functions(array(foo_cloner,foo_get_value,foo_get_class,foo_just_do_it,bar_baseclass,bar_cloner,bar_get_value,bar_get_class,bar_just_do_it)); check::functions(array('foo_cloner','foo_get_value','foo_get_class','foo_just_do_it','bar_baseclass','bar_cloner','bar_get_value','bar_get_class','bar_just_do_it'));
// No new classes // No new classes
check::classes(array(A,Foo,Bar)); check::classes(array('A','Foo','Bar'));
// now new vars // now new vars
check::globals(array()); check::globals(array());

View file

@ -4,9 +4,9 @@ require "tests.php";
require "director_enum.php"; require "director_enum.php";
// No new functions // No new functions
check::functions(array(foo_say_hello,foo_say_hi,foo_say_bye,foo_say_hi_ref,foo_ping,foo_ping_ref,foo_ping_member_enum,a_f,a2_f)); check::functions(array('foo_say_hello','foo_say_hi','foo_say_bye','foo_say_hi_ref','foo_ping','foo_ping_ref','foo_ping_member_enum','a_f','a2_f'));
// No new classes // No new classes
check::classes(array(director_enum,Foo,A,B,A2,B2)); check::classes(array('director_enum','Foo','A','B','A2','B2'));
// now new vars // now new vars
check::globals(array()); check::globals(array());

View file

@ -4,9 +4,9 @@ require "tests.php";
require "director_exception.php"; require "director_exception.php";
// No new functions // No new functions
check::functions(array(foo_ping,foo_pong,launder,bar_ping,bar_pong,returnalltypes_return_int,returnalltypes_return_double,returnalltypes_return_const_char_star,returnalltypes_return_std_string,returnalltypes_return_bar,returnalltypes_call_int,returnalltypes_call_double,returnalltypes_call_const_char_star,returnalltypes_call_std_string,returnalltypes_call_bar,is_python_builtin)); check::functions(array('foo_ping','foo_pong','launder','bar_ping','bar_pong','returnalltypes_return_int','returnalltypes_return_double','returnalltypes_return_const_char_star','returnalltypes_return_std_string','returnalltypes_return_bar','returnalltypes_call_int','returnalltypes_call_double','returnalltypes_call_const_char_star','returnalltypes_call_std_string','returnalltypes_call_bar','is_python_builtin'));
// No new classes // No new classes
check::classes(array(director_exception,Foo,Exception1,Exception2,Base,Bar,ReturnAllTypes)); check::classes(array('director_exception','Foo','Exception1','Exception2','Base','Bar','ReturnAllTypes'));
// now new vars // now new vars
check::globals(array()); check::globals(array());

View file

@ -4,9 +4,9 @@ require "tests.php";
require "director_extend.php"; require "director_extend.php";
// No new functions // No new functions
check::functions(array(spobject_getfoobar,spobject_dummy,spobject_exceptionmethod)); check::functions(array('spobject_getfoobar','spobject_dummy','spobject_exceptionmethod'));
// No new classes // No new classes
check::classes(array(SpObject)); check::classes(array('SpObject'));
// now new vars // now new vars
check::globals(array()); check::globals(array());

View file

@ -4,16 +4,16 @@ require "tests.php";
require "director_finalizer.php"; require "director_finalizer.php";
// No new functions // No new functions
check::functions(array(foo_orstatus,deletefoo,getstatus,launder,resetstatus)); check::functions(array('foo_orstatus','deletefoo','getstatus','launder','resetstatus'));
// No new classes // No new classes
check::classes(array(director_finalizer,Foo)); check::classes(array('director_finalizer','Foo'));
// now new vars // now new vars
check::globals(array()); check::globals(array());
class MyFoo extends Foo { class MyFoo extends Foo {
function __destruct() { function __destruct() {
$this->orStatus(2); $this->orStatus(2);
if (method_exists(parent, "__destruct")) { if (method_exists(get_parent_class(), "__destruct")) {
parent::__destruct(); parent::__destruct();
} }
} }

View file

@ -4,11 +4,11 @@ require "tests.php";
require "director_frob.php"; require "director_frob.php";
// No new functions // No new functions
check::functions(array(alpha_abs_method,bravo_abs_method,charlie_abs_method,ops_opint,ops_opintstarstarconst,ops_opintamp,ops_opintstar,ops_opconstintintstar,prims_ull,prims_callull,corecallbacks_on3dengineredrawn,corecallbacks_on3dengineredrawn2)); check::functions(array('alpha_abs_method','bravo_abs_method','charlie_abs_method','ops_opint','ops_opintstarstarconst','ops_opintamp','ops_opintstar','ops_opconstintintstar','prims_ull','prims_callull','corecallbacks_on3dengineredrawn','corecallbacks_on3dengineredrawn2'));
// No new classes // No new classes
check::classes(array(Alpha,Bravo,Charlie,Delta,Ops,Prims,corePoint3d,coreCallbacks_On3dEngineRedrawnData,coreCallbacksOn3dEngineRedrawnData,coreCallbacks)); check::classes(array('Alpha','Bravo','Charlie','Delta','Ops','Prims','corePoint3d','coreCallbacks_On3dEngineRedrawnData','coreCallbacksOn3dEngineRedrawnData','coreCallbacks'));
// now new vars // now new vars
check::globals(array(corecallbacks_on3dengineredrawndata__eye,corecallbacks_on3dengineredrawndata__at,corecallbackson3dengineredrawndata__eye,corecallbackson3dengineredrawndata__at)); check::globals(array('corecallbacks_on3dengineredrawndata__eye','corecallbacks_on3dengineredrawndata__at','corecallbackson3dengineredrawndata__eye','corecallbackson3dengineredrawndata__at'));
$foo = new Bravo(); $foo = new Bravo();
$s = $foo->abs_method(); $s = $foo->abs_method();

View file

@ -4,9 +4,9 @@ require "tests.php";
require "director_nested.php"; require "director_nested.php";
// No new functions // No new functions
check::functions(array(foo_int_advance,foo_int_do_advance,bar_step,bar_do_advance,bar_do_step,foobar_int_get_value,foobar_int_get_name,foobar_int_name,foobar_int_get_self,foobar_int_do_advance,foobar_int_do_step)); check::functions(array('foo_int_advance','foo_int_do_advance','bar_step','bar_do_advance','bar_do_step','foobar_int_get_value','foobar_int_get_name','foobar_int_name','foobar_int_get_self','foobar_int_do_advance','foobar_int_do_step'));
// No new classes // No new classes
check::classes(array(Foo_int,Bar,FooBar_int)); check::classes(array('Foo_int','Bar','FooBar_int'));
// now new vars // now new vars
check::globals(array()); check::globals(array());

View file

@ -4,9 +4,9 @@ require "tests.php";
require "director_profile.php"; require "director_profile.php";
// No new functions // No new functions
check::functions(array(b_fn,b_vfi,b_fi,b_fj,b_fk,b_fl,b_get_self,b_vfs,b_fs)); check::functions(array('b_fn','b_vfi','b_fi','b_fj','b_fk','b_fl','b_get_self','b_vfs','b_fs'));
// No new classes // No new classes
check::classes(array(A,B)); check::classes(array('A','B'));
// now new vars // now new vars
check::globals(array()); check::globals(array());

View file

@ -3,9 +3,9 @@
require "tests.php"; require "tests.php";
require "director_protected.php"; require "director_protected.php";
check::functions(array(foo_pong,foo_s,foo_q,foo_ping,foo_pang,foo_used,foo_cheer,bar_create,bar_callping,bar_callcheer,bar_cheer,bar_pong,bar_used,bar_ping,bar_pang,a_draw,b_draw)); check::functions(array('foo_pong','foo_s','foo_q','foo_ping','foo_pang','foo_used','foo_cheer','bar_create','bar_callping','bar_callcheer','bar_cheer','bar_pong','bar_used','bar_ping','bar_pang','a_draw','b_draw'));
check::classes(array(Foo,Bar,PrivateFoo,A,B,AA,BB)); check::classes(array('Foo','Bar','PrivateFoo','A','B','AA','BB'));
check::globals(array(bar_a)); check::globals(array('bar_a'));
class FooBar extends Bar { class FooBar extends Bar {
protected function ping() { protected function ping() {

View file

@ -4,9 +4,9 @@ require "tests.php";
require "director_stl.php"; require "director_stl.php";
// No new functions // No new functions
check::functions(array(foo_bar,foo_ping,foo_pong,foo_tping,foo_tpong,foo_pident,foo_vident,foo_vsecond,foo_tpident,foo_tvident,foo_tvsecond,foo_vidents,foo_tvidents)); check::functions(array('foo_bar','foo_ping','foo_pong','foo_tping','foo_tpong','foo_pident','foo_vident','foo_vsecond','foo_tpident','foo_tvident','foo_tvsecond','foo_vidents','foo_tvidents'));
// No new classes // No new classes
check::classes(array(Foo)); check::classes(array('Foo'));
// now new vars // now new vars
check::globals(array()); check::globals(array());

View file

@ -4,11 +4,11 @@ require "tests.php";
require "director_string.php"; require "director_string.php";
// No new functions // No new functions
check::functions(array(a_get_first,a_call_get_first,a_string_length,a_process_text,a_call_process_func,stringvector_size,stringvector_is_empty,stringvector_clear,stringvector_push,stringvector_pop,stringvector_capacity,stringvector_reserve)); check::functions(array('a_get_first','a_call_get_first','a_string_length','a_process_text','a_call_process_func','stringvector_size','stringvector_is_empty','stringvector_clear','stringvector_push','stringvector_pop','stringvector_capacity','stringvector_reserve'));
// No new classes // No new classes
check::classes(array(A,StringVector)); check::classes(array('A','StringVector'));
// now new vars // now new vars
check::globals(array(a,a_call,a_m_strings,stringvector)); check::globals(array('a','a_call','a_m_strings','stringvector'));
class B extends A { class B extends A {
function get_first() { function get_first() {

View file

@ -8,11 +8,11 @@ require "director_thread.php";
exit(0); exit(0);
// No new functions // No new functions
check::functions(array(millisecondsleep,foo_stop,foo_run,foo_do_foo)); check::functions(array('millisecondsleep','foo_stop','foo_run','foo_do_foo'));
// No new classes // No new classes
check::classes(array(director_thread,Foo)); check::classes(array('director_thread','Foo'));
// now new vars // now new vars
check::globals(array(foo_val)); check::globals(array('foo_val'));
class Derived extends Foo { class Derived extends Foo {
function do_foo() { function do_foo() {

View file

@ -4,11 +4,11 @@ require "tests.php";
require "director_unroll.php"; require "director_unroll.php";
// No new functions // No new functions
check::functions(array(foo_ping,foo_pong)); check::functions(array('foo_ping','foo_pong'));
// No new classes // No new classes
check::classes(array(Foo,Bar)); check::classes(array('Foo','Bar'));
// now new vars // now new vars
check::globals(array(bar)); check::globals(array('bar'));
class MyFoo extends Foo { class MyFoo extends Foo {
function ping() { function ping() {

View file

@ -2,9 +2,9 @@
require "tests.php"; require "tests.php";
require "exception_order.php"; require "exception_order.php";
check::functions(array(a_foo,a_bar,a_foobar,a_barfoo,is_python_builtin)); check::functions(array('a_foo','a_bar','a_foobar','a_barfoo','is_python_builtin'));
check::classes(array(A,E1,E2,E3,exception_order,ET_i,ET_d)); check::classes(array('A','E1','E2','E3','exception_order','ET_i','ET_d'));
check::globals(array(efoovar,foovar,cfoovar,a_sfoovar,a_foovar,a_efoovar)); check::globals(array('efoovar','foovar','cfoovar','a_sfoovar','a_foovar','a_efoovar'));
$a = new A(); $a = new A();
try { try {

View file

@ -6,14 +6,14 @@ require "grouping.php";
check::functions(array("test1","test2","do_unary","negate")); check::functions(array("test1","test2","do_unary","negate"));
check::equal(5,test1(5),"5==test1(5)"); check::equal(5,test1(5),"5==test1(5)");
check::resource(test2(7),"_p_int","_p_int==test2(7)"); check::resource(test2(7),"_p_int","_p_int==test2(7)");
check::globals(array(test3)); check::globals(array('test3'));
//check::equal(37,test3_get(),'37==test3_get()'); //check::equal(37,test3_get(),'37==test3_get()');
check::equal(37,check::get("test3"),'37==get(test3)'); check::equal(37,check::get("test3"),'37==get(test3)');
//test3_set(38); //test3_set(38);
check::set(test3,38); check::set('test3',38);
//check::equal(38,test3_get(),'38==test3_get() after test3_set(37)'); //check::equal(38,test3_get(),'38==test3_get() after test3_set(37)');
check::equal(38,check::get(test3),'38==get(test3) after set(test)'); check::equal(38,check::get('test3'),'38==get(test3) after set(test)');
check::equal(-5,negate(5),"-5==negate(5)"); check::equal(-5,negate(5),"-5==negate(5)");
check::equal(7,do_unary(-7,NEGATE),"7=do_unary(-7,NEGATE)"); check::equal(7,do_unary(-7,NEGATE),"7=do_unary(-7,NEGATE)");

View file

@ -4,9 +4,9 @@ require "tests.php";
require "ignore_parameter.php"; require "ignore_parameter.php";
// New functions // New functions
check::functions(array(jaguar,lotus,tvr,ferrari,sportscars_daimler,sportscars_astonmartin,sportscars_bugatti,sportscars_lamborghini)); check::functions(array('jaguar','lotus','tvr','ferrari','sportscars_daimler','sportscars_astonmartin','sportscars_bugatti','sportscars_lamborghini'));
// New classes // New classes
check::classes(array(ignore_parameter,SportsCars,MiniCooper,MorrisMinor,FordAnglia,AustinAllegro)); check::classes(array('ignore_parameter','SportsCars','MiniCooper','MorrisMinor','FordAnglia','AustinAllegro'));
// No new vars // No new vars
check::globals(array()); check::globals(array());

View file

@ -3,9 +3,9 @@ require "tests.php";
require "import_nomodule.php"; require "import_nomodule.php";
// No new functions // No new functions
check::functions(array(create_foo,delete_foo,test1,is_python_builtin)); check::functions(array('create_foo','delete_foo','test1','is_python_builtin'));
// No new classes // No new classes
check::classes(array(import_nomodule,Bar)); check::classes(array('import_nomodule','Bar'));
// now new vars // now new vars
check::globals(array()); check::globals(array());

View file

@ -3,14 +3,14 @@ require "tests.php";
require "li_carrays_cpp.php"; require "li_carrays_cpp.php";
// Check functions. // Check functions.
check::functions(array(new_intarray,delete_intarray,intarray_getitem,intarray_setitem,doublearray_getitem,doublearray_setitem,doublearray_cast,doublearray_frompointer,xyarray_getitem,xyarray_setitem,xyarray_cast,xyarray_frompointer,delete_abarray,abarray_getitem,abarray_setitem,shortarray_getitem,shortarray_setitem,shortarray_cast,shortarray_frompointer,sum_array)); check::functions(array('new_intarray','delete_intarray','intarray_getitem','intarray_setitem','doublearray_getitem','doublearray_setitem','doublearray_cast','doublearray_frompointer','xyarray_getitem','xyarray_setitem','xyarray_cast','xyarray_frompointer','delete_abarray','abarray_getitem','abarray_setitem','shortarray_getitem','shortarray_setitem','shortarray_cast','shortarray_frompointer','sum_array'));
// Check classes. // Check classes.
// NB An "li_carrays_cpp" class is created as a mock namespace. // NB An "li_carrays_cpp" class is created as a mock namespace.
check::classes(array(li_carrays_cpp,doubleArray,AB,XY,XYArray,shortArray)); check::classes(array('li_carrays_cpp','doubleArray','AB','XY','XYArray','shortArray'));
// Check global variables. // Check global variables.
check::globals(array(xy_x,xy_y,globalxyarray,ab_a,ab_b,globalabarray)); check::globals(array('xy_x','xy_y','globalxyarray','ab_a','ab_b','globalabarray'));
$d = new doubleArray(10); $d = new doubleArray(10);

View file

@ -3,14 +3,14 @@ require "tests.php";
require "li_carrays.php"; require "li_carrays.php";
// Check functions. // Check functions.
check::functions(array(new_intarray,delete_intarray,intarray_getitem,intarray_setitem,doublearray_getitem,doublearray_setitem,doublearray_cast,doublearray_frompointer,xyarray_getitem,xyarray_setitem,xyarray_cast,xyarray_frompointer,delete_abarray,abarray_getitem,abarray_setitem,shortarray_getitem,shortarray_setitem,shortarray_cast,shortarray_frompointer,sum_array)); check::functions(array('new_intarray','delete_intarray','intarray_getitem','intarray_setitem','doublearray_getitem','doublearray_setitem','doublearray_cast','doublearray_frompointer','xyarray_getitem','xyarray_setitem','xyarray_cast','xyarray_frompointer','delete_abarray','abarray_getitem','abarray_setitem','shortarray_getitem','shortarray_setitem','shortarray_cast','shortarray_frompointer','sum_array'));
// Check classes. // Check classes.
// NB An "li_carrays" class is created as a mock namespace. // NB An "li_carrays" class is created as a mock namespace.
check::classes(array(li_carrays,doubleArray,AB,XY,XYArray,shortArray)); check::classes(array('li_carrays','doubleArray','AB','XY','XYArray','shortArray'));
// Check global variables. // Check global variables.
check::globals(array(xy_x,xy_y,globalxyarray,ab_a,ab_b,globalabarray)); check::globals(array('xy_x','xy_y','globalxyarray','ab_a','ab_b','globalabarray'));
$d = new doubleArray(10); $d = new doubleArray(10);

View file

@ -4,9 +4,9 @@ require "tests.php";
require "li_factory.php"; require "li_factory.php";
// No new functions // No new functions
check::functions(array(geometry_draw,geometry_create,geometry_clone_,point_draw,point_width,point_clone_,circle_draw,circle_radius,circle_clone_)); check::functions(array('geometry_draw','geometry_create','geometry_clone_','point_draw','point_width','point_clone_','circle_draw','circle_radius','circle_clone_'));
// No new classes // No new classes
check::classes(array(Geometry,Point,Circle)); check::classes(array('Geometry','Point','Circle'));
// now new vars // now new vars
check::globals(array()); check::globals(array());

View file

@ -4,9 +4,9 @@ require "tests.php";
require "newobject1.php"; require "newobject1.php";
// No new functions // No new functions
check::functions(array(foo_makefoo,foo_makemore,foo_foocount)); check::functions(array('foo_makefoo','foo_makemore','foo_foocount'));
// No new classes // No new classes
check::classes(array(Foo)); check::classes(array('Foo'));
// now new vars // now new vars
check::globals(array()); check::globals(array());

View file

@ -6,7 +6,7 @@ require "overload_rename.php";
// No new functions // No new functions
check::functions(array()); check::functions(array());
// No new classes // No new classes
check::classes(array(Foo)); check::classes(array('Foo'));
// now new vars // now new vars
check::globals(array()); check::globals(array());

View file

@ -3,8 +3,8 @@
require "tests.php"; require "tests.php";
require "php_iterator.php"; require "php_iterator.php";
check::functions(array(myiterator_rewind,myiterator_key,myiterator_current,myiterator_next,myiterator_valid)); check::functions(array('myiterator_rewind','myiterator_key','myiterator_current','myiterator_next','myiterator_valid'));
check::classes(array(MyIterator)); check::classes(array('MyIterator'));
// No new global variables. // No new global variables.
check::globals(array()); check::globals(array());

View file

@ -4,9 +4,9 @@ require "tests.php";
require "prefix.php"; require "prefix.php";
// No new functions // No new functions
check::functions(array(foo_get_self)); check::functions(array('foo_get_self'));
// No new classes // No new classes
check::classes(array(ProjectFoo)); check::classes(array('ProjectFoo'));
// now new vars // now new vars
check::globals(array()); check::globals(array());

View file

@ -6,7 +6,7 @@ require "sym.php";
// No new functions // No new functions
check::functions(array()); check::functions(array());
// No new classes // No new classes
check::classes(array(flim,flam)); check::classes(array('flim','flam'));
// now new vars // now new vars
check::globals(array()); check::globals(array());

View file

@ -6,7 +6,7 @@ require "template_arg_typename.php";
// No new functions // No new functions
check::functions(array()); check::functions(array());
// No new classes // No new classes
check::classes(array(UnaryFunction_bool_bool,BoolUnaryFunction_bool)); check::classes(array('UnaryFunction_bool_bool','BoolUnaryFunction_bool'));
$ufbb=new unaryfunction_bool_bool(); $ufbb=new unaryfunction_bool_bool();
check::is_a($ufbb,"unaryfunction_bool_bool"); check::is_a($ufbb,"unaryfunction_bool_bool");

View file

@ -3,7 +3,7 @@
require "tests.php"; require "tests.php";
require "template_construct.php"; require "template_construct.php";
check::classes(array(Foo_int)); check::classes(array('Foo_int'));
$foo_int=new foo_int(3); $foo_int=new foo_int(3);
check::is_a($foo_int,"foo_int","Made a foo_int"); check::is_a($foo_int,"foo_int","Made a foo_int");

View file

@ -1,15 +1,15 @@
<?php <?php
// do we have true global vars or just GETSET functions?
// Used to filter out get/set global functions to fake vars...
define(GETSET,1);
$_original_functions=get_defined_functions(); $_original_functions=get_defined_functions();
$_original_globals=1; $_original_globals=1;
$_original_classes=get_declared_classes(); $_original_classes=get_declared_classes();
$_original_globals=array_keys($GLOBALS); $_original_globals=array_keys($GLOBALS);
class check { class check {
// do we have true global vars or just GETSET functions?
// Used to filter out get/set global functions to fake vars...
const GETSET = 1;
function get_extra_classes($ref=FALSE) { function get_extra_classes($ref=FALSE) {
static $extra; static $extra;
global $_original_classes; global $_original_classes;
@ -31,11 +31,11 @@ class check {
$extra=array(); $extra=array();
$extrags=array(); $extrags=array();
$df=get_defined_functions(); $df=get_defined_functions();
$df=array_flip($df[internal]); $df=array_flip($df['internal']);
foreach($_original_functions[internal] as $func) unset($df[$func]); foreach($_original_functions['internal'] as $func) unset($df[$func]);
// Now chop out any get/set accessors // Now chop out any get/set accessors
foreach(array_keys($df) as $func) foreach(array_keys($df) as $func)
if ((GETSET && preg_match('/_[gs]et$/', $func)) || if ((self::GETSET && preg_match('/_[gs]et$/', $func)) ||
preg_match('/^new_/', $func) || preg_match('/^new_/', $func) ||
preg_match('/_(alter|get)_newobject$/', $func)) preg_match('/_(alter|get)_newobject$/', $func))
$extrags[]=$func; $extrags[]=$func;
@ -50,7 +50,7 @@ class check {
static $extra; static $extra;
global $_original_globals; global $_original_globals;
if (! is_array($extra)) { if (! is_array($extra)) {
if (GETSET) { if (self::GETSET) {
$_extra=array(); $_extra=array();
foreach(check::get_extra_functions(false,1) as $global) { foreach(check::get_extra_functions(false,1) as $global) {
if (preg_match('/^(.*)_[sg]et$/', $global, $match)) if (preg_match('/^(.*)_[sg]et$/', $global, $match))
@ -100,13 +100,13 @@ class check {
function set($var,$value) { function set($var,$value) {
$func=$var."_set"; $func=$var."_set";
if (GETSET) $func($value); if (self::GETSET) $func($value);
else $_GLOBALS[$var]=$value; else $_GLOBALS[$var]=$value;
} }
function &get($var) { function &get($var) {
$func=$var."_get"; $func=$var."_get";
if (GETSET) return $func(); if (self::GETSET) return $func();
else return $_GLOBALS[$var]; else return $_GLOBALS[$var];
} }
@ -171,7 +171,7 @@ class check {
$missing=array(); $missing=array();
$extra=array_flip(check::get_extra_globals()); $extra=array_flip(check::get_extra_globals());
foreach ($globals as $glob) { foreach ($globals as $glob) {
if (GETSET) { if (self::GETSET) {
if (! isset($extra[$glob])) $missing[]=$glob; if (! isset($extra[$glob])) $missing[]=$glob;
else unset($extra[$glob]); else unset($extra[$glob]);
} else { } else {

View file

@ -4,11 +4,11 @@ require "tests.php";
require "threads_exception.php"; require "threads_exception.php";
// Check functions // Check functions
check::functions(array(test_simple,test_message,test_hosed,test_unknown,test_multi,is_python_builtin)); check::functions(array('test_simple','test_message','test_hosed','test_unknown','test_multi','is_python_builtin'));
// Check classes. // Check classes.
check::classes(array(Exc,Test,threads_exception)); check::classes(array('Exc','Test','threads_exception'));
// Check globals. // Check globals.
check::globals(array(exc_code,exc_msg)); check::globals(array('exc_code','exc_msg'));
$t = new Test(); $t = new Test();
try { try {

View file

@ -3,7 +3,7 @@
require "tests.php"; require "tests.php";
require "typedef_reference.php"; require "typedef_reference.php";
check::functions(array(somefunc,otherfunc,new_intp,copy_intp,delete_intp,intp_assign,intp_value)); check::functions(array('somefunc','otherfunc','new_intp','copy_intp','delete_intp','intp_assign','intp_value'));
$int2=copy_intp(2); $int2=copy_intp(2);
check::equal(2,somefunc($int2)," test passing intp to somefunc"); check::equal(2,somefunc($int2)," test passing intp to somefunc");
$int3=copy_intp(3); $int3=copy_intp(3);

View file

@ -39,8 +39,7 @@
SWIG_SetPointerZval(&c.value, (void*)$value, $1_descriptor, 0); SWIG_SetPointerZval(&c.value, (void*)$value, $1_descriptor, 0);
zval_copy_ctor(&c.value); zval_copy_ctor(&c.value);
c.name = zend_string_init("$symname", sizeof("$symname") - 1, 0); c.name = zend_string_init("$symname", sizeof("$symname") - 1, 0);
c.flags = CONST_CS; SWIG_ZEND_CONSTANT_SET_FLAGS(&c, CONST_CS, module_number);
c.module_number = module_number;
zend_register_constant(&c); zend_register_constant(&c);
} }

View file

@ -32,6 +32,13 @@ extern "C" {
REGISTER_STRINGL_CONSTANT(#N, &swig_char, 1, CONST_CS | CONST_PERSISTENT);\ REGISTER_STRINGL_CONSTANT(#N, &swig_char, 1, CONST_CS | CONST_PERSISTENT);\
} while (0) } while (0)
/* ZEND_CONSTANT_SET_FLAGS is new in PHP 7.3. */
#ifdef ZEND_CONSTANT_SET_FLAGS
# define SWIG_ZEND_CONSTANT_SET_FLAGS ZEND_CONSTANT_SET_FLAGS
#else
# define SWIG_ZEND_CONSTANT_SET_FLAGS(C, F, N) do { (C)->flags = (F); (C)->module_number = (N); } while (0)
#endif
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -2002,7 +2002,7 @@ if test x"${PHPBIN}" = xno; then
PHP= PHP=
else else
if test "x$PHPBIN" = xyes; then if test "x$PHPBIN" = xyes; then
AC_CHECK_PROGS(PHP, [php7.1 php7.0 php]) AC_CHECK_PROGS(PHP, [php7.3 php7.2 php7.1 php7.0 php])
else else
PHP=$PHPBIN PHP=$PHPBIN
fi fi