Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
* Fix zephir-lang#1851

* Generate c code

* Updated

* Update FcallTest.php
  • Loading branch information
dreamsxin committed Nov 6, 2019
1 parent ad8f061 commit 81b7f45
Show file tree
Hide file tree
Showing 126 changed files with 410 additions and 122 deletions.
3 changes: 2 additions & 1 deletion ext/config.m4
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,8 @@ if test "$PHP_TEST" = "yes"; then
test/7__closure.zep.c
test/8__closure.zep.c
test/9__closure.zep.c
test/10__closure.zep.c "
test/10__closure.zep.c
test/11__closure.zep.c "
PHP_NEW_EXTENSION(test, $test_sources, $ext_shared,, )
PHP_SUBST(TEST_SHARED_LIBADD)

Expand Down
2 changes: 1 addition & 1 deletion ext/config.w32
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ if (PHP_TEST != "no") {
AC_DEFINE("ZEPHIR_USE_PHP_JSON", 1, "Whether PHP json extension is present at compile time");
}

ADD_SOURCES(configure_module_dirname + "/test", "testinterface.zep.c scallparent.zep.c constantsparent.zep.c methodinterface.zep.c arithmetic.zep.c arrayaccessobj.zep.c arrayaccesstest.zep.c arrayiterator.zep.c arrayiteratortest.zep.c arrayobject.zep.c arraysearch.zep.c assign.zep.c bitwise.zep.c branchprediction.zep.c cast.zep.c cblock.zep.c chars.zep.c closures.zep.c compare.zep.c concat.zep.c constants.zep.c constantsinterface.zep.c constantsinterfacea.zep.c constantsinterfaceb.zep.c declaretest.zep.c diinterface.zep.c echoes.zep.c emptytest.zep.c evaltest.zep.c exception.zep.c exceptions.zep.c exists.zep.c exitdie.zep.c extendedinterface.zep.c factorial.zep.c fannkuch.zep.c fasta.zep.c fcall.zep.c fetchtest.zep.c fibonnaci.zep.c flow.zep.c fortytwo.zep.c functional.zep.c functionexists.zep.c geometry.zep.c globals.zep.c instance.zep.c instanceoff.zep.c internalclasses.zep.c internalinterfaces.zep.c invoke.zep.c issettest.zep.c issue1404.zep.c issue1521.zep.c issues.zep.c json.zep.c logical.zep.c mcall.zep.c mcallchained.zep.c mcalldynamic.zep.c mcallinternal.zep.c methodabstract.zep.c methodargs.zep.c nativearray.zep.c oo.zep.c operator.zep.c pdostatement.zep.c pregmatch.zep.c quantum.zep.c range.zep.c references.zep.c regexdna.zep.c requires.zep.c resourcetest.zep.c returns.zep.c router.zep.c scall.zep.c scalldynamic.zep.c scallexternal.zep.c scope.zep.c sort.zep.c spectralnorm.zep.c spropertyaccess.zep.c statements.zep.c strings.zep.c stubs.zep.c ternary.zep.c trytest.zep.c typeinstances.zep.c typeoff.zep.c unknownclass.zep.c unsettest.zep.c usetest.zep.c vars.zep.c 0__closure.zep.c 1__closure.zep.c 2__closure.zep.c 3__closure.zep.c 4__closure.zep.c 5__closure.zep.c 6__closure.zep.c 7__closure.zep.c 8__closure.zep.c 9__closure.zep.c 10__closure.zep.c", "test");
ADD_SOURCES(configure_module_dirname + "/test", "testinterface.zep.c scallparent.zep.c constantsparent.zep.c methodinterface.zep.c arithmetic.zep.c arrayaccessobj.zep.c arrayaccesstest.zep.c arrayiterator.zep.c arrayiteratortest.zep.c arrayobject.zep.c arraysearch.zep.c assign.zep.c bitwise.zep.c branchprediction.zep.c cast.zep.c cblock.zep.c chars.zep.c closures.zep.c compare.zep.c concat.zep.c constants.zep.c constantsinterface.zep.c constantsinterfacea.zep.c constantsinterfaceb.zep.c declaretest.zep.c diinterface.zep.c echoes.zep.c emptytest.zep.c evaltest.zep.c exception.zep.c exceptions.zep.c exists.zep.c exitdie.zep.c extendedinterface.zep.c factorial.zep.c fannkuch.zep.c fasta.zep.c fcall.zep.c fetchtest.zep.c fibonnaci.zep.c flow.zep.c fortytwo.zep.c functional.zep.c functionexists.zep.c geometry.zep.c globals.zep.c instance.zep.c instanceoff.zep.c internalclasses.zep.c internalinterfaces.zep.c invoke.zep.c issettest.zep.c issue1404.zep.c issue1521.zep.c issues.zep.c json.zep.c logical.zep.c mcall.zep.c mcallchained.zep.c mcalldynamic.zep.c mcallinternal.zep.c methodabstract.zep.c methodargs.zep.c nativearray.zep.c oo.zep.c operator.zep.c pdostatement.zep.c pregmatch.zep.c quantum.zep.c range.zep.c references.zep.c regexdna.zep.c requires.zep.c resourcetest.zep.c returns.zep.c router.zep.c scall.zep.c scalldynamic.zep.c scallexternal.zep.c scope.zep.c sort.zep.c spectralnorm.zep.c spropertyaccess.zep.c statements.zep.c strings.zep.c stubs.zep.c ternary.zep.c trytest.zep.c typeinstances.zep.c typeoff.zep.c unknownclass.zep.c unsettest.zep.c usetest.zep.c vars.zep.c 0__closure.zep.c 1__closure.zep.c 2__closure.zep.c 3__closure.zep.c 4__closure.zep.c 5__closure.zep.c 6__closure.zep.c 7__closure.zep.c 8__closure.zep.c 9__closure.zep.c 10__closure.zep.c 11__closure.zep.c", "test");
ADD_SOURCES(configure_module_dirname + "/test/oo/extend", "exception.zep.c", "test");
ADD_SOURCES(configure_module_dirname + "/test/oo/extend/db", "exception.zep.c", "test");
ADD_SOURCES(configure_module_dirname + "/test/globals/session", "base.zep.c child.zep.c", "test");
Expand Down
2 changes: 2 additions & 0 deletions ext/kernel/fcall.c
Original file line number Diff line number Diff line change
Expand Up @@ -421,6 +421,8 @@ int zephir_call_user_function(zval *object_pp, zend_class_entry *obj_ce, zephir_
}
else if (FAILURE == status || EG(exception)) {
ZVAL_NULL(retval_ptr);
} else if (Z_TYPE_P(retval_ptr) == IS_ARRAY) {
SEPARATE_ARRAY(retval_ptr);
}

return status;
Expand Down
18 changes: 15 additions & 3 deletions ext/kernel/object.c
Original file line number Diff line number Diff line change
Expand Up @@ -436,15 +436,16 @@ int zephir_read_property(zval *result, zval *object, const char *property_name,

ce = Z_OBJCE_P(object);

if (ce->parent) {
ce = zephir_lookup_class_ce(ce, property_name, property_length);
}

#if PHP_VERSION_ID >= 70100
old_scope = EG(fake_scope);
EG(fake_scope) = ce;
#else
old_scope = EG(scope);
EG(scope) = ce;
if (ce->parent) {
ce = zephir_lookup_class_ce(ce, property_name, property_length);
}
#endif

if (!Z_OBJ_HT_P(object)->read_property) {
Expand Down Expand Up @@ -570,6 +571,17 @@ int zephir_update_property_zval(zval *object, const char *property_name, unsigne

ZVAL_STRINGL(&property, property_name, property_length);

if (Z_TYPE_P(value) == IS_ARRAY) {
if (EXPECTED(!(GC_FLAGS(Z_ARRVAL_P(value)) & IS_ARRAY_IMMUTABLE))) {
if (UNEXPECTED(GC_REFCOUNT(Z_ARR_P(value)) > 1)) {
if (Z_REFCOUNTED_P(value)) {
GC_DELREF(Z_ARR_P(value));
}
}
}
ZVAL_ARR(value, zend_array_dup(Z_ARR_P(value)));
}

/* write_property will add 1 to refcount, so no Z_TRY_ADDREF_P(value); is necessary */
Z_OBJ_HT_P(object)->write_property(object, &property, value, 0);
zval_ptr_dtor(&property);
Expand Down
2 changes: 1 addition & 1 deletion ext/php_test.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
#define PHP_TEST_VERSION "1.0.0"
#define PHP_TEST_EXTNAME "test"
#define PHP_TEST_AUTHOR "Zephir Team and contributors"
#define PHP_TEST_ZEPVERSION "0.11.11-$Id$"
#define PHP_TEST_ZEPVERSION "0.12.0-$Id$"
#define PHP_TEST_DESCRIPTION "Description <b>test</b> for<br/>Test Extension."

typedef struct _zephir_struct_db {
Expand Down
2 changes: 2 additions & 0 deletions ext/test.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ zend_class_entry *test_oo_scopes_hasprivatemethod_ce;
zend_class_entry *test_properties_publicproperties_ce;
zend_class_entry *test_0__closure_ce;
zend_class_entry *test_10__closure_ce;
zend_class_entry *test_11__closure_ce;
zend_class_entry *test_1__closure_ce;
zend_class_entry *test_2__closure_ce;
zend_class_entry *test_3__closure_ce;
Expand Down Expand Up @@ -400,6 +401,7 @@ static PHP_MINIT_FUNCTION(test)
ZEPHIR_INIT(Test_Vars);
ZEPHIR_INIT(test_0__closure);
ZEPHIR_INIT(test_10__closure);
ZEPHIR_INIT(test_11__closure);
ZEPHIR_INIT(test_1__closure);
ZEPHIR_INIT(test_2__closure);
ZEPHIR_INIT(test_3__closure);
Expand Down
1 change: 1 addition & 0 deletions ext/test.h
Original file line number Diff line number Diff line change
Expand Up @@ -188,5 +188,6 @@
#include "test/8__closure.zep.h"
#include "test/9__closure.zep.h"
#include "test/10__closure.zep.h"
#include "test/11__closure.zep.h"

#endif
1 change: 1 addition & 0 deletions ext/test/0__closure.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 2 additions & 9 deletions ext/test/10__closure.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions ext/test/1__closure.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions ext/test/2__closure.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions ext/test/3__closure.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions ext/test/4__closure.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions ext/test/5__closure.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions ext/test/6__closure.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions ext/test/7__closure.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 7 additions & 8 deletions ext/test/8__closure.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 1 addition & 5 deletions ext/test/8__closure.zep.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 11 additions & 1 deletion ext/test/9__closure.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 5 additions & 1 deletion ext/test/9__closure.zep.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion ext/test/arithmetic.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions ext/test/arrayaccesstest.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions ext/test/arrayiteratortest.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions ext/test/arraysearch.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions ext/test/bitwise.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions ext/test/branchprediction.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion ext/test/builtin/arraymethods.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions ext/test/builtin/charmethods.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions ext/test/builtin/intmethods.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions ext/test/builtin/stringmethods.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions ext/test/cast.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions ext/test/cblock.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions ext/test/chars.zep.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 81b7f45

Please sign in to comment.