update readme
[m6w6/ext-psi] / src / call.c
index 22516c77cf7f2280d627fc6bffbd745f9b19868b..704675c91f444abab532f63f0447fdabfcf68096 100644 (file)
  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *******************************************************************************/
 
-#include "php_psi_stdinc.h"
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#else
+# include "php_config.h"
+#endif
+
 #include "context.h"
 #include "data.h"
 #include "call.h"
 
+#include "php_psi.h"
+
 #include "php.h"
 #include "zend_exceptions.h"
-#include "ext/spl/spl_exceptions.h"
 
 struct psi_call_frame_argument *psi_call_frame_argument_init(struct psi_impl_arg *spec,
                impl_val *ival, zval *zptr, int is_vararg) {
@@ -199,7 +205,7 @@ zval *psi_call_frame_sub_argument(struct psi_call_frame *frame,
        if (!iarg) {
                struct psi_call_frame_argument *frame_arg;
                impl_val empty_val = {0};
-               zend_string *type_str = zend_string_init_interned(ZEND_STRL("mixed"), 1);
+               zend_string *type_str = psi_string_init_interned(ZEND_STRL("mixed"), 1);
                struct psi_impl_arg *carg_spec = psi_impl_arg_init(
                                psi_impl_type_init(PSI_T_MIXED, type_str),
                                psi_impl_var_copy(inner_var), NULL);
@@ -256,7 +262,7 @@ struct psi_context *psi_call_frame_get_context(struct psi_call_frame *frame) {
 #else
 #      define PARAM_PROLOGUE(separate) Z_PARAM_PROLOGUE(1, separate)
 #endif
-ZEND_RESULT_CODE psi_call_frame_parse_args(struct psi_call_frame *frame,
+bool psi_call_frame_parse_args(struct psi_call_frame *frame,
                zend_execute_data *execute_data) {
        size_t i, argc = psi_plist_count(frame->impl->func->args);
        zend_error_handling zeh;
@@ -268,7 +274,7 @@ ZEND_RESULT_CODE psi_call_frame_parse_args(struct psi_call_frame *frame,
 
                rv = zend_parse_parameters_none();
                zend_restore_error_handling(&zeh);
-               return rv;
+               return rv == SUCCESS;
        }
 
        ZEND_PARSE_PARAMETERS_START(
@@ -334,7 +340,7 @@ ZEND_RESULT_CODE psi_call_frame_parse_args(struct psi_call_frame *frame,
        }
        ZEND_PARSE_PARAMETERS_END_EX(
                zend_restore_error_handling(&zeh);
-               return FAILURE;
+               return false;
        );
 
        /* set up defaults */
@@ -349,7 +355,7 @@ ZEND_RESULT_CODE psi_call_frame_parse_args(struct psi_call_frame *frame,
        }
 
        zend_restore_error_handling(&zeh);
-       return SUCCESS;
+       return true;
 }
 
 void psi_call_frame_enter(struct psi_call_frame *frame) {
@@ -371,7 +377,7 @@ void psi_call_frame_enter(struct psi_call_frame *frame) {
        frame->rpointer = rv_sym->ptr = rv_sym->ival_ptr;
 }
 
-ZEND_RESULT_CODE psi_call_frame_do_let(struct psi_call_frame *frame) {
+bool psi_call_frame_do_let(struct psi_call_frame *frame) {
        size_t i;
        struct psi_let_stmt *let;
        struct psi_decl_arg *arg;
@@ -417,27 +423,23 @@ ZEND_RESULT_CODE psi_call_frame_do_let(struct psi_call_frame *frame) {
                }
        }
 
-       return SUCCESS;
+       return true;
 }
 
-ZEND_RESULT_CODE psi_call_frame_do_assert(struct psi_call_frame *frame, enum psi_assert_kind kind) {
+bool psi_call_frame_do_assert(struct psi_call_frame *frame, enum psi_assert_kind kind) {
        size_t i = 0;
        struct psi_assert_stmt *ass;
 
        while (psi_plist_get(frame->impl->stmts.ass, i++, &ass)) {
                if (ass->kind == kind) {
                        if (!psi_assert_stmt_exec(ass, frame)) {
-                               char *message = psi_assert_stmt_message(ass);
-                               zend_throw_exception(kind == PSI_ASSERT_PRE
-                                               ? spl_ce_InvalidArgumentException
-                                               : spl_ce_UnexpectedValueException, message, 0);
-                               free(message);
-                               return FAILURE;
+                               psi_assert_stmt_throw(ass);
+                               return false;
                        }
                }
        }
 
-       return SUCCESS;
+       return true;
 }
 
 void psi_call_frame_do_call(struct psi_call_frame *frame) {
@@ -477,6 +479,7 @@ void psi_call_frame_do_callback(struct psi_call_frame *frame, struct psi_call_fr
        rc = zend_fcall_info_call(&frame_arg->ival_ptr->zend.cb->fci,
                        &frame_arg->ival_ptr->zend.cb->fcc,     &return_value, NULL);
        assert(rc == SUCCESS);
+       (void) rc;
 
        /* marshal return value of the userland call */
        frame_arg->zval_ptr = &return_value;
@@ -536,8 +539,6 @@ static void psi_call_frame_local_auto_dtor(void *auto_list)
        efree(auto_list);
 }
 
-#include "php_psi.h"
-
 void psi_call_frame_free(struct psi_call_frame *frame) {
        zend_hash_destroy(&frame->arguments);
        zend_hash_destroy(&frame->symbols);